Sabit Yapıcılar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 13 / 110.
Bir sabit yapıcı (constant constructor), derleme zamanı sabit nesneleri oluşturur. Bir const yapıcı kullanarak aynı değerlere sahip nesneler oluşturduğunuzda, Dart bellekte aynı örneği yeniden kullanarak performansı artırır.
Bir sabit (constant) yapıcı oluşturmak için yapıcı adından önce const anahtar kelimesini ekleyin ve tüm örnek değişkenlerinin final olduğundan emin olun:
class Color {
final int red;
final int green;
final int blue;
const Color(this.red, this.green, this.blue);
}
const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);
print(identical(white, alsoWhite)); // trueHem white hem de alsoWhite, bir const yapıcı kullanılarak özdeş değerlerle oluşturuldukları için bellekteki tam olarak aynı nesneye işaret ederler.
Ayrıca const anahtar kelimesini kullanmadan const yapıcılarını kullanabilirsiniz; bu, normal (sabit olmayan) örnekler oluşturur:
var red = Color(255, 0, 0); // Normal örnek
const blue = Color(0, 0, 255); // Sabit örnekSabit yapıcılar (constant constructors); değişmez yapılandırma nesneleri, renkler veya boyutlar gibi önceden tanımlanmış değerler için ve bellek kullanımını optimize ederken nesne değişmezliğini garanti etmek istediğiniz her yerde yaygın olarak kullanılır.
Görev
KolayDeğişmez ve yeniden kullanılabilir ayarları tanımlamak için sabit yapıcıları (constant constructors) kullanan basit bir oyun için bir yapılandırma sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
difficulty.dart: Oyun zorluk ayarlarını temsil eden birDifficultysınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:- Üç
finalalan:name(String),enemyCount(int) veplayerLives(int) - Her üç alanı da başlatan bir sabit yapıcı (constant constructor)
- Zorluk bilgilerini yazdıran bir
display()metodu
- Üç
main.dart: Zorluk sınıfınızı içe aktarın ve üç sabit zorluk ön ayarı oluşturun:'Easy'isminde,5düşman ve5cana sahipeasy'Medium'isminde,10düşman ve3cana sahipmedium'Hard'isminde,20düşman ve1cana sahiphard
constanahtar kelimesini kullanarak derleme zamanı sabitleri (compile-time constants) olarak oluşturun. Ardından, yukarıda listelenen sırayla her biri üzerindedisplay()metodunu çağırın. Son olarak, ikiconst Difficulty('Easy', 5, 5)nesnesininidentical()kullanarak özdeş olup olmadığını kontrol edin ve sonucu yazdırın.
display() metodu tam olarak şu formatta yazdırmalıdır:
[name]: [enemyCount] enemies, [playerLives] livesBeklenen çıktı:
Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
trueKopya kağıdı
Bir sabit yapıcı (constant constructor), derleme zamanı sabit nesneleri oluşturur. Aynı değerlere sahip nesneler bir const yapıcı kullanılarak oluşturulduğunda, Dart bellekteki aynı örneği yeniden kullanır.
Bir sabit yapıcı oluşturmak için, yapıcı adından önce const anahtar kelimesini ekleyin ve tüm örnek değişkenlerinin final olduğundan emin olun:
class Color {
final int red;
final int green;
final int blue;
const Color(this.red, this.green, this.blue);
}Aynı değerlere sahip sabit örnekler oluşturmak, bellekte aynı nesnenin oluşmasını sağlar:
const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);
print(identical(white, alsoWhite)); // trueConst yapıcılar, normal örnekler oluşturmak için const anahtar kelimesi olmadan da kullanılabilir:
var red = Color(255, 0, 0); // Regular instance
const blue = Color(0, 0, 255); // Constant instanceSabit yapıcılar; değişmez yapılandırma nesneleri, önceden tanımlanmış değerler ve bellek kullanımını optimize etmek için kullanışlıdır.
Kendin dene
import 'difficulty.dart';
void main() {
// TODO: const anahtar kelimesini kullanarak üç sabit zorluk ön ayarı oluşturun:
// - easy: name 'Easy', 5 enemies, 5 lives
// - medium: name 'Medium', 10 enemies, 3 lives
// - hard: name 'Hard', 20 enemies, 1 life
// TODO: Her zorluk seviyesi için sırasıyla display() fonksiyonunu çağırın: easy, medium, hard
// TODO: İki const Difficulty('Easy', 5, 5) nesnesinin özdeş olup olmadığını
// identical() kullanarak kontrol edin ve sonucu yazdı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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı