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.0area 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.78Setter, 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.
Görev
KolayOyuncu 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 birPlayersınıfı tanımla. Sınıfında şunlar bulunmalı:- Oyuncunun adı için bir
String namealanı int _scoredeğerinden başlayan özel bir0alanıint _livesdeğerinden başlayan özel bir3alanı- Oyuncunun adını alan bir yapıcı
- Geçerli puanı döndüren bir
scoregetter'ı - Yalnızca
scoreveya daha büyük değerleri kabul eden bir0setter'ı (negatif değerleri yok say) - Mevcut can sayısını döndüren bir
livesgetter'ı - Yalnızca
livesile0arasındaki değerleri (bu değerler dahil) kabul eden bir5setter'ı (bu aralığın dışındaki değerleri yok say) - Oyuncunun seviyesini puana göre hesaplayan bir
levelgetter'ı: puanın100'e bölümü (tamsayı bölmesi) artı1 - Can sayısı
isAlive'dan büyüksetruedöndüren bir0getter'ı - Oyuncunun mevcut durumunu yazdıran bir
displayStatus()metodu
- Oyuncunun adı için bir
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ı
250olarak ayarla vedisplayStatus()metodunu çağır - Puanı
-50olarak ayarlamayı dene (yok sayılmalı) vedisplayStatus()metodunu çağır - Can sayısını
1olarak ayarla vedisplayStatus()metodunu çağır - Can sayısını
10olarak ayarlamayı dene (yok sayılmalı) vedisplayStatus()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: trueKendin 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
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi