Menu
Coddy logo textTech

Getter ve Setter'lar

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 21 / 110.

Getter ve setter'lar, sınıf alanlarına normal özellikler gibi görünen özel yöntemler aracılığıyla erişmek ve bunları değiştirmek için bir yol sağlar. Alanları doğrudan açığa çıkarmak yerine, değerlerin nasıl okunduğunu ve yazıldığını kontrol edebilirsiniz.

Bir getter, get anahtar kelimesi kullanılarak tanımlanır ve hesaplanmış veya saklanmış bir değer döndürür:

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.0

area ve perimeter özelliklerine alanlar gibi erişildiğine, ancak her seferinde hesaplandıklarına dikkat edin. Parantez gerekmez.

Bir setter, set anahtar kelimesini kullanır ve bir değerin nasıl atandığını kontrol etmenize olanak tanır:

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.78

Setter, girdiyi depolamadan önce doğrular ve hatta birimler arasında dönüşüm yapabilir. Bu, sınıfınızın kullanıcıları için temiz, özellik benzeri bir sözdizimi korurken verileriniz üzerinde kontrol sahibi olmanızı sağlar.

challenge icon

Görev

Kolay

Oyuncu istatistiklerini doğrulama ve hesaplanan değerlerle yönetmek için getter ve setter'ları kullanan bir oyun için puan takip sistemi oluşturalım.

Kodunu iki dosyada düzenleyeceksin:

  • player.dart: Bir oyuncunun oyun performansını takip eden bir Player sınıfı tanımla. Sınıfında şunlar bulunmalı:
    • Oyuncunun adı için bir String name alanı
    • int _score değerinden başlayan özel bir 0 alanı
    • int _lives değerinden başlayan özel bir 3 alanı
    • Oyuncunun adını alan bir yapıcı
    • Geçerli puanı döndüren bir score getter'ı
    • Yalnızca score veya daha büyük değerleri kabul eden bir 0 setter'ı (negatif değerleri yok say)
    • Mevcut can sayısını döndüren bir lives getter'ı
    • Yalnızca lives ile 0 arasındaki değerleri (bu değerler dahil) kabul eden bir 5 setter'ı (bu aralığın dışındaki değerleri yok say)
    • Oyuncunun seviyesini puana göre hesaplayan bir level getter'ı: puanın 100'e bölümü (tamsayı bölmesi) artı 1
    • Can sayısı isAlive'dan büyükse true döndüren bir 0 getter'ı
    • Oyuncunun mevcut durumunu yazdıran bir displayStatus() metodu
  • main.dart: Oyuncu sınıfını içe aktar ve getter ile setter'ları göster:
    • 'Alex' adında bir oyuncu oluştur
    • Puanı 250 olarak ayarla ve displayStatus() metodunu çağır
    • Puanı -50 olarak ayarlamayı dene (yok sayılmalı) ve displayStatus() metodunu çağır
    • Can sayısını 1 olarak ayarla ve displayStatus() metodunu çağır
    • Can sayısını 10 olarak ayarlamayı dene (yok sayılmalı) ve displayStatus() metodunu çağır

displayStatus() metodu tam olarak şu biçimde yazdırmalı:

[name] | Score: [score] | Level: [level] | Lives: [lives] | Alive: [isAlive]

Beklenen çıktı:

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

Kendin dene

import 'player.dart';

void main() {
  // TODO: 'Alex' adında bir oyuncu oluşturun

  // TODO: Skoru 250 olarak ayarlayın ve displayStatus() fonksiyonunu çağırın

  // TODO: Skoru -50 yapmayı deneyin (göz ardı edilmeli) ve displayStatus() fonksiyonunu çağırın

  // TODO: Can sayısını 1 olarak ayarlayın ve displayStatus() fonksiyonunu çağırın

  // TODO: Can sayısını 10 yapmayı deneyin (göz ardı edilmeli) ve displayStatus() fonksiyonunu çağırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi