Pendalaman Getter & Setter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 33 dari 110.
Getter dan setter menjadi alat yang ampuh untuk enkapsulasi saat dipadukan dengan field privat. Keduanya memungkinkan kamu menyediakan antarmuka publik yang rapi sambil tetap mengendalikan sepenuhnya cara data diakses dan diubah.
Pola yang umum adalah memasangkan field privat dengan getter publik dan setter yang menyertakan validasi:
class Temperature {
double _celsius = 0;
double get celsius => _celsius;
set celsius(double value) {
if (value < -273.15) {
_celsius = -273.15; // Batas minimum nol mutlak
} else {
_celsius = value;
}
}
}Setter dapat menerapkan aturan bisnis, memastikan object-mu tidak pernah berada dalam kondisi yang tidak valid.
Kamu juga dapat membuat getter terhitung yang memperoleh nilai dari data privat:
class Rectangle {
double _width;
double _height;
Rectangle(this._width, this._height);
double get area => _width * _height; // Dihitung
double get perimeter => 2 * (_width + _height);
double get width => _width;
set width(double value) {
if (value > 0) _width = value;
}
}Terkadang kamu ingin akses hanya-baca. Cukup sediakan getter tanpa setter:
class Order {
final DateTime _createdAt = DateTime.now();
DateTime get createdAt => _createdAt; // Hanya bisa dibaca
}Pola ini memberi kode eksternal akses untuk melihat data sekaligus mencegah perubahan apa pun: field private yang hanya disertai getter menciptakan akses hanya-baca yang sesungguhnya.
Tantangan
MudahMari bangun sistem inventaris produk yang menunjukkan keunggulan getter dan setter untuk mengendalikan akses data. Kamu akan membuat class yang melindungi data internalnya sekaligus menyediakan property hasil perhitungan dan validasi.
Kamu akan mengatur kodemu ke dalam dua file:
product.dart: Definisikan classProductyang mengelola inventaris dengan enkapsulasi yang tepat. Produkmu harus memiliki:String namepublikdouble _priceprivatint _quantityprivat- Sebuah constructor yang menerima ketiga nilai
- Getter
priceyang mengembalikan harga privat - Setter
priceyang hanya menerima nilai lebih besar dari0(abaikan nilai yang tidak valid) - Getter
quantityyang mengembalikan kuantitas privat - Setter
quantityyang hanya menerima nilai0atau lebih besar (abaikan nilai negatif) - Getter hasil perhitungan
totalValueyang mengembalikan_price * _quantity - Getter hasil perhitungan
isInStockyang mengembalikantruejika kuantitas lebih besar dari0 - Getter hanya-baca
skuyang membuat SKU sederhana dengan mengembalikan 3 karakter pertama nama dalam huruf kapital, diikuti kuantitasnya (misalnya,LAP25untuk "Laptop" dengan kuantitas 25) - Method
displayProduct()yang menampilkan detail produk
main.dart: Impor class produkmu dan tunjukkan cara getter dan setter mengendalikan akses:- Buat produk bernama
'Laptop'dengan harga999.99dan kuantitas25 - Panggil
displayProduct() - Cetak
In stock: [isInStock] - Cetak
SKU: [sku] - Coba atur harga menjadi
-50.0(seharusnya diabaikan) - Atur harga menjadi
899.99(perubahan yang valid) - Coba atur kuantitas menjadi
-10(seharusnya diabaikan) - Atur kuantitas menjadi
0(perubahan yang valid) - Panggil
displayProduct() - Cetak
In stock: [isInStock] - Cetak
SKU: [sku]
- Buat produk bernama
Method displayProduct() harus mencetak dengan format berikut:
--- Product Info ---
Name: [name]
Price: $[price]
Quantity: [quantity]
Total Value: $[totalValue]Output yang diharapkan:
--- Product Info ---
Name: Laptop
Price: $999.99
Quantity: 25
Total Value: $24999.75
In stock: true
SKU: LAP25
--- Product Info ---
Name: Laptop
Price: $899.99
Quantity: 0
Total Value: $0.0
In stock: false
SKU: LAP0Coba sendiri
import 'product.dart';
void main() {
// TODO: Buat produk bernama 'Laptop' dengan harga 999.99 dan jumlah 25
// TODO: Panggil displayProduct()
// TODO: Cetak "In stock: [isInStock]"
// TODO: Cetak "SKU: [sku]"
// TODO: Coba atur harga menjadi -50.0 (seharusnya diabaikan)
// TODO: Atur harga menjadi 899.99 (perubahan yang valid)
// TODO: Coba atur jumlah menjadi -10 (seharusnya diabaikan)
// TODO: Atur jumlah menjadi 0 (perubahan yang valid)
// TODO: Panggil displayProduct()
// TODO: Cetak "In stock: [isInStock]"
// TODO: Cetak "SKU: [sku]"
}
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