Friday, June 08, 2007

Public Variable, Get/Set, Binding..

Kapan sebaiknya kita memilih menggunakan antara get/set atau public variable di class kita?
Dalam beberapa situasi, penggunaan get/set mempunyai keuntungan tersendiri.
Sebaliknya pada situasi lain public variable akan lebih efektif dibandingkan get/set

Sedangkan dalam penggunaannya, bentuk pemanggilan keduanya mempunyai kesamaan.


//Contoh penggunaan public variable dan get/set
myClass.myPublicVariable = true;
//atau
trace(myClass.myPublicVariable);



Pendeklarasian public variable :

/** 
* Contoh deklarasi public var di myClass
*/


[Bindable]
public var
myPublicVariable:Boolean = true;



Pada kondisi bila tidak ada tindak lanjut tambahan (additional actions) ketika variable berubah value, maka penulisan public variable lebih baik dibandingkan get/set.

Pada contoh diatas bila myPublicVariable diubah value-nya maka binding akan di-update, dan segala object component yang ter-bound dengan binding variable tadi juga ter-update. Sehingga tidak perlu menggunakan get/set disini.

Pendeklarasian get/set function :

/** 
* Contoh deklarasi public get/set di myClass
*/

[Bindable(event="publicVarUpdated")]
public function set
myPublicVariable(val:Boolean):void{
_myVar = val;
_counterSet++;
otherFunction();
dispatchEvent(new FlexEvent("publicVarUpdated"));
}


public function get myPublicVariable():Boolean{
_counterGet++;
otherFunction2();
return _myVar;
}

private var _myVar:Boolean;
private var _counterSet:int;
private var _counterGet:int



Pada contoh diatas baris [Bindable(event="publicVarUpdated")] menunjukkan bahwa setiap component / object lain yang ter-bound ke property myPublicVariable akan langsung meng-update value-nya ketika event dengan type "publicVarUpdated" di-dispatch. Anda perhatikan di function setter-nya terdapat baris untuk dispatchEvent ketika myPublicVariable di-set, yang akan langsung memberitahukan ke semua component/ object yang ter-bound ke property myPublicVariable ini untuk segera meng-update value sesuai nilai terbaru.

Keuntungan utama dari get/set adalah mereka memungkinkan serangkaian perintah tambahan dieksekusi dalam satu pemanggilan function get/set. Anda dapat membuat class/component anda untuk langsung memanggil fungsi tertentu ketika get/set dipanggil, seperti contoh diatas.

Dalam framework Adobe Flex component, get/set banyak dipakai terutama untuk dispatch custom event, mengganti style component, layout, measure dan lain-lain.

1 comment:

Guntur Sarwohadi said...

halo.. baru tau blog ini. lam kenal.

cuma ingin komen dikit. aku suka pake getter/setter, terutama karena bisa set readable or writable only. tapi ini di haXe ya (udah tau haXe blom?), kita bisa:

private var _myvariable:Int;
public var myVariable(getMyVariable, null):Int;

private var function getMyVariable():Int {
return _myvariable;
}

yang di dalam kurung itu, parameter pertama adalah deklarasi buat getter dan berikutnya setter. kalo kita kasih null artinya disabled.. myVariable gak writable. kita juga bisa gunakan default kalo gak ada fungsi penggantinya kayak:

public var myVariable(default, null):Int;

ini berarti instancenya hanya bisa read gak bisa write :)

btw ini kok dokter tapi flasher ya.. lebih berat dimananya nih? :p

sukses deh :)