Menu
Coddy logo textTech

Final ve Const Alanlar

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

Bir sınıfta alanları tanımlarken, başlatıldıktan sonra değerlerin değişip değişemeyeceğini kontrol etmek için final veya const kullanabilirsiniz. Her ikisi de değişmez değerler oluşturur, ancak farklı şekilde çalışırlar.

final alanı yalnızca bir kez ayarlanabilir, ancak değeri çalışma zamanında belirlenir. Bu alanı bildirim sırasında veya bir oluşturucu aracılığıyla atayabilirsiniz:

class Person {
  final String name;
  final DateTime createdAt = DateTime.now();
  
  Person(this.name);
}

Person p = Person('Alice');
// p.name = 'Bob';  // Hata: final alan yeniden atanamaz

name, nesne oluşturulduğunda ayarlanır ve createdAt geçerli zamanı yakalar. Her iki değer de başlatma işleminden sonra kilitlenir.

static const alanının derleme zamanında bilinen bir değere sahip olması gerekir. Alan sınıfın kendisine aittir ve tüm örnekler arasında paylaşılır:

class Circle {
  static const double pi = 3.14159;
  final double radius;
  
  Circle(this.radius);
  
  double get area => Circle.pi * radius * radius;
}

Temel fark: final alanlar çalışma zamanında hesaplanan değerleri (DateTime.now() gibi) tutabilirken, const derleme zamanı sabitleri gerektirir. Örnek alanları doğrudan const olamaz; sınıf düzeyinde yalnızca static const kullanımına izin verilir.

challenge icon

Görev

Kolay

final ve static const alanları arasındaki farkı gösteren bir ürün kataloğu sistemi oluşturalım. Değişmez özelliklere ve paylaşılan yapılandırma değerlerine sahip ürünler oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • product.dart: Bir mağazadaki ürünü temsil eden bir Product sınıfı tanımla. Sınıfın şunlara sahip olmalı:
    • Tüm ürünler arasında paylaşılan static const double taxRate (%8 vergi oranı) değerine ayarlanmış bir 0.08
    • static const String currency değerine ayarlanmış bir 'USD'
    • Ürün adı için (yapıcı aracılığıyla ayarlanan) bir final String name
    • Ürünün temel fiyatı için (yapıcı aracılığıyla ayarlanan) bir final double basePrice
    • Ürün adının büyük harfli hâlinin önüne final String sku öneki getirilerek başlatıcı listesinde hesaplanan, stok tutma birimini temsil eden bir 'SKU-'
    • name ve basePrice alanlarını alan bir yapıcı
    • Vergi dâhil fiyatı hesaplayan bir priceWithTax alıcısı
    • Ürün bilgilerini yazdıran bir display() yöntemi
  • main.dart: Ürün sınıfını içe aktar ve iki ürün oluştur:
    • Temel fiyatı 'Laptop' olan bir 999.99
    • Temel fiyatı 'Mouse' olan bir 29.99
    Yukarıdaki listede belirtilen sırayla her ürün için display() çağır.

display() yöntemi tam olarak şu biçimde yazdırmalı:

[sku] - [name]: [basePrice] [currency] (with tax: [priceWithTax] [currency])

Görüntülerken priceWithTax kullanarak toStringAsFixed(2) değerini 2 ondalık basamağa yuvarla.

Beklenen çıktı:

SKU-LAPTOP - Laptop: 999.99 USD (with tax: 1079.99 USD)
SKU-MOUSE - Mouse: 29.99 USD (with tax: 32.39 USD)

Kendin dene

import 'product.dart';

void main() {
  // TODO: 999.99 taban fiyatı ile 'Laptop' adında bir Product oluşturun
  
  // TODO: 29.99 taban fiyatı ile 'Mouse' adında bir Product oluşturun
  
  // TODO: Her bir ürün üzerinde sırasıyla display() metodunu çağırın (önce Laptop, sonra Mouse)
  
}
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