Properties & Methods
Kita telah mempelajari variabel untuk menyimpan nilai dan function untuk menuliskan set instruksi yang bisa digunakan kembali. Di dalam class, variabel dan fungsi ini dikenal dengan property dan method.
Seperti yang telah disebutkan pada materi Class, property merepresentasikan atribut pada sebuah objek sementara method menggambarkan perilaku dari objek.
Sama seperti variabel, kita mendeklarasikan property di dalam kelas dengan menentukan tipe datanya atau menginisialisasikan nilainya secara eksplisit.
class Animal {
String _name = '';
int _age;
double _weight = 0;
}
OOP memiliki konsep enkapsulasi di mana kita bisa menyembunyikan informasi di dalam objek sehingga status atau data di dalam objek tidak bisa diubah atau bahkan dilihat.
Umumnya bahasa pemrograman memiliki visibility modifier untuk menentukan siapa saja yang bisa mengakses property atau method.
Namun, Dart tidak memiliki keyword visibility modifier seperti private atau public. Bagaimana cara mengatasinya?
Jadikanlah class sebagai library lalu panggilah ia dengan keyword import. Untuk membuat class sebagai library Anda cukup membuat berkas baru, sehingga Anda akan memiliki 2 buah berkas:
main.dart |
import 'Animal.dart'; |
Animal.dart |
class Animal { |
String _name = '';
int _age;
double _weight = 0;
Setelah menambahkan underscore pada nama variabel, Anda akan mendapatkan eror di berkas main.dart ketika mengakses property weight. Apa pasal? Kini weight bersifat private dan tidak bisa diakses dari luar berkasnya. Solusinya, Anda bisa menambahkan setter dan getter untuk mendapatkan nilai serta mengubahnya dari luar berkas. Jika menggunakan IntelliJ IDEA Anda bisa menggunakan shortcut Alt + Insert lalu pilih Getter and Setter.
// Setter
set name(String value) {
_name = value;
}
// Getter
double get weight => _weight;
Selain dengan setter, Anda juga bisa mengubah nilai dengan property dari pemanggilan method. Pada contoh kelas hewan tentunya kita tidak bisa langsung mengubah nilai berat badan, namun kita bisa menambah dan mengubah nilainya melalui proses makan atau buang air besar (BAB).
void eat() {
print('$_name is eating.');
_weight = _weight + 0.2;
}
void poop() {
print('$_name is pooping.');
_weight = _weight - 0.1;
}