CodeBlanks Logo Icon CodeBlanks

Getter ve setter

get ve set ile kontrollü erişim öğrenirsin.

get ve set

Dart, private alanlara kontrollü erişim için getter ve setter sunar. get ve set anahtar kelimeleriyle yazılır; çağrımda parantez kullanılmaz.

Örnek: double get balance => _balance; set balance(double value) { if (value < 0) return; _balance = value; }. Burada balance hem okunabilir hem yazılabilir bir erişimcidir. Okuma a.balance, yazma a.balance = 100 biçiminde yapılır. Setter içindeki koşul, negatif değerlerin yazılmasını engeller. Bu yapı, alanı doğrudan açmadan doğrulama eklemenin temiz yoludur.

Setter ile doğrulama

Setter, yazma işlemine araya girer; böylece değer doğrulaması yapılabilir. Geçersiz değer girildiğinde atama engellenir ya da düzeltilir.

Örnek: set balance(double value) { if (value < 0) return; _balance = value; }. Burada negatif bir değer yazılmak istenirse return ile işlem durdurulur ve _balance değişmez. Bu sayede kullanıcı hatası önlenir; nesne her zaman tutarlı kalır. Yalnızca okunan alanlar için setter yazılmaz; bu durumda alan salt okunur olur ve dışarıdan değiştirilemez.

Uygulama Account'a getter ve setter ekle

Account sınıfını tanımla; double _balance private alanını ve Account(this._balance) yapıcısını ekle. double get balance => _balance; getter'ını ve set balance(double value) { if (value < 0) return; _balance = value; } setter'ını yaz. main içinde var a = Account(100); ile örnek oluştur, print(a.balance) ile yazdır, a.balance = 200 ile güncelle ve tekrar print(a.balance) çağrısı yap.

Başlangıç kodu

main.dart
// Account sınıfını tanımla
// private _balance, yapıcı, getter ve setter ekle

void main() {
  // Account(100) örneği oluştur, balance yazdır, 200'ye güncelle, tekrar yazdır
}

Örnek çözüm

main.dart
// Account sınıfını tanımla
class Account {
  double _balance;
  Account(this._balance);
  double get balance => _balance;
  set balance(double value) {
    if (value < 0) return;
    _balance = value;
  }
}

void main() {
  var a = Account(100);
  print(a.balance);
  a.balance = 200;
  print(a.balance);
}

Beklenen çıktı

100.0
200.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 getter bildirimini tamamla

Soru
  double ____ balance => _balance;
Cevap
  double get balance => _balance;

Açıklama: get anahtar kelimesi okuma erişimcisi tanımlar.

2 set balance(double value) ne işe yarar?

  • Yalnızca değeri okur
  • Static alan tanımlar
  • Yazma işlemini doğrulama ile sarar Doğru cevap
  • Yapıcıyı çağırır

Açıklama: Setter, yazmaya araya girer; doğrulama ekler.

3 Erişimci parçalarını eşle

Kavram Anlamı
get Okuma erişimcisi
set Yazma erişimcisi
_balance Private alan

Orta seviye bölümündeki tüm dersler