Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 class Product yang mengelola inventaris dengan enkapsulasi yang tepat. Produkmu harus memiliki:
    • String name publik
    • double _price privat
    • int _quantity privat
    • Sebuah constructor yang menerima ketiga nilai
    • Getter price yang mengembalikan harga privat
    • Setter price yang hanya menerima nilai lebih besar dari 0 (abaikan nilai yang tidak valid)
    • Getter quantity yang mengembalikan kuantitas privat
    • Setter quantity yang hanya menerima nilai 0 atau lebih besar (abaikan nilai negatif)
    • Getter hasil perhitungan totalValue yang mengembalikan _price * _quantity
    • Getter hasil perhitungan isInStock yang mengembalikan true jika kuantitas lebih besar dari 0
    • Getter hanya-baca sku yang membuat SKU sederhana dengan mengembalikan 3 karakter pertama nama dalam huruf kapital, diikuti kuantitasnya (misalnya, LAP25 untuk "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 harga 999.99 dan kuantitas 25
    • 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]

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: LAP0

Coba 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]"
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online