Getter dan Setter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 21 dari 110.
Getter dan setter menyediakan cara untuk mengakses dan mengubah field class melalui method khusus yang terlihat seperti property biasa. Alih-alih menampilkan field secara langsung, kamu dapat mengatur cara nilai dibaca dan ditulis.
Getter didefinisikan menggunakan kata kunci get dan mengembalikan nilai yang dihitung atau disimpan:
class Rectangle {
double width;
double height;
Rectangle(this.width, this.height);
double get area => width * height;
double get perimeter => 2 * (width + height);
}
Rectangle rect = Rectangle(5, 3);
print(rect.area); // 15.0
print(rect.perimeter); // 16.0Perhatikan bahwa area dan perimeter diakses seperti field, tetapi keduanya dihitung setiap kali. Tidak perlu tanda kurung.
Setter menggunakan kata kunci set dan memungkinkan kamu mengontrol cara nilai ditetapkan:
class Temperature {
double _celsius;
Temperature(this._celsius);
double get celsius => _celsius;
set celsius(double value) {
if (value >= -273.15) {
_celsius = value;
}
}
double get fahrenheit => _celsius * 9 / 5 + 32;
set fahrenheit(double value) {
celsius = (value - 32) * 5 / 9;
}
}
Temperature temp = Temperature(25);
print(temp.fahrenheit); // 77.0
temp.fahrenheit = 100;
print(temp.celsius); // 37.78Setter memvalidasi input sebelum menyimpannya dan bahkan dapat mengonversi antar satuan. Ini memberimu kendali atas datamu sekaligus menjaga sintaks yang rapi seperti property bagi pengguna class-mu.
Tantangan
MudahMari buat pelacak skor untuk game yang menggunakan getter dan setter untuk mengelola statistik pemain dengan validasi dan nilai hasil perhitungan.
Kamu akan mengatur kodemu ke dalam dua file:
player.dart: Definisikan classPlayeryang melacak performa pemain dalam game. Class-mu harus memiliki:- Field
String nameuntuk nama pemain - Field privat
int _scoreyang dimulai dari0 - Field privat
int _livesyang dimulai dari3 - Konstruktor yang menerima nama pemain
- Getter
scoreyang mengembalikan skor saat ini - Setter
scoreyang hanya menerima nilai0atau lebih (abaikan nilai negatif) - Getter
livesyang mengembalikan jumlah nyawa saat ini - Setter
livesyang hanya menerima nilai antara0dan5, termasuk keduanya (abaikan nilai di luar rentang ini) - Getter
levelyang menghitung level pemain berdasarkan skor: skor dibagi100(pembagian bilangan bulat), lalu ditambah1 - Getter
isAliveyang mengembalikantruejika jumlah nyawa lebih dari0 - Method
displayStatus()yang mencetak status pemain saat ini
- Field
main.dart: Impor class pemainmu dan tunjukkan getter dan setter:- Buat pemain bernama
'Alex' - Atur skor ke
250dan panggildisplayStatus() - Coba atur skor ke
-50(seharusnya diabaikan), lalu panggildisplayStatus() - Atur jumlah nyawa ke
1dan panggildisplayStatus() - Coba atur jumlah nyawa ke
10(seharusnya diabaikan), lalu panggildisplayStatus()
- Buat pemain bernama
Method displayStatus() harus mencetak dengan format persis seperti ini:
[name] | Score: [score] | Level: [level] | Lives: [lives] | Alive: [isAlive]Output yang diharapkan:
Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: trueCoba sendiri
import 'player.dart';
void main() {
// TODO: Buat pemain bernama 'Alex'
// TODO: Atur skor menjadi 250 dan panggil displayStatus()
// TODO: Coba atur skor menjadi -50 (seharusnya diabaikan) dan panggil displayStatus()
// TODO: Atur lives menjadi 1 dan panggil displayStatus()
// TODO: Coba atur lives menjadi 10 (seharusnya diabaikan) dan panggil displayStatus()
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online