Menu
Coddy logo textTech

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)); // true

Hem 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 örnek

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

challenge icon

Görev

Kolay

Değ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 bir Difficulty sınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:
    • Üç final alan: name (String), enemyCount (int) ve playerLives (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, 5 düşman ve 5 cana sahip easy
    • 'Medium' isminde, 10 düşman ve 3 cana sahip medium
    • 'Hard' isminde, 20 düşman ve 1 cana sahip hard
    Her üçünü de const anahtar kelimesini kullanarak derleme zamanı sabitleri (compile-time constants) olarak oluşturun. Ardından, yukarıda listelenen sırayla her biri üzerinde display() metodunu çağırın. Son olarak, iki const Difficulty('Easy', 5, 5) nesnesinin identical() 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] lives

Beklenen çıktı:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

Kopya 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)); // true

Const 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 instance

Sabit 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
}
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