Menu
Coddy logo textTech

Sealed Sınıflar (Dart 3)

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

Dart 3, hangi sınıfların onları genişletebileceğini veya uygulayabileceğini kısıtlayan mühürlü sınıfları (sealed classes) tanıttı. Bir sınıfı sealed olarak işaretlediğinizde, yalnızca aynı dosyadaki sınıflar onun doğrudan alt türleri olabilir. Bu, bilinen alt türlerden oluşan kapalı bir küme oluşturur.

sealed class Result {}

class Success extends Result {
  final String data;
  Success(this.data);
}

class Failure extends Result {
  final String error;
  Failure(this.error);
}

Sealed class'ların gücü, kapsamlılık kontrolünden (exhaustiveness checking) gelir. Bir sealed tür üzerinde switch kullandığınızda, derleyici tüm olası alt türleri bilir ve her birini ele aldığınızdan emin olur:

String handleResult(Result result) {
  return switch (result) {
    Success(data: var d) => 'Got: $d',
    Failure(error: var e) => 'Error: $e',
  };
  // Varsayılana gerek yok - derleyici tüm durumların kapsandığını biliyor!
}

void main() {
  var success = Success('Hello');
  var failure = Failure('Not found');
  
  print(handleResult(success));  // Got: Hello
  print(handleResult(failure));  // Error: Not found
}

Bir sealed class'a yeni bir alt tür eklerseniz, derleyici onu işlemeyen her switch ifadesini işaretleyecektir. Bu, sealed class'ları durumları, sonuçları veya sabit bir varyant kümesine sahip olduğunuz herhangi bir senaryoyu modellemek için ideal hale getirir. Abstract class'ların aksine, sealed class'lar hiçbir harici kodun beklenmedik alt türler ekleyemeyeceğini garanti eder.

challenge icon

Görev

Kolay

Mühürlü sınıfları (sealed classes) kullanarak bir ağ isteği işleyicisi oluşturalım! Bir ağ yanıtının farklı durumlarını modelleyen ve her olası sonucun düzgün bir şekilde işlenmesini sağlayan tip güvenli bir sistem oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • response.dart: Bir ağ yanıtının tüm olası durumlarını temsil eden mühürlü bir sınıf hiyerarşisi oluşturun:
    • Tüm yanıt türleri için temel görevi gören NetworkResponse adında mühürlü bir sınıf
    • NetworkResponse sınıfını genişleten ve String message alanına (örneğin, "Fetching data...") sahip bir Loading sınıfı
    • NetworkResponse sınıfını genişleten, String data ve int statusCode alanlarına sahip bir Success sınıfı
    • NetworkResponse sınıfını genişleten, String errorMessage ve int errorCode alanlarına sahip bir Error sınıfı
  • main.dart: Yanıt dosyanızı içe aktarın ve bir switch ifadesi kullanarak tüm yanıt türlerini işleyen bir fonksiyon oluşturun:
    • String döndüren bir handleResponse(NetworkResponse response) fonksiyonu oluşturun
    • Her durumu işlemek için desen eşleme (pattern matching) içeren bir switch ifadesi kullanın:
      • Loading için: Status: [message] döndürün
      • Success için: Success ([statusCode]): [data] döndürün
      • Error için: Error ([errorCode]): [errorMessage] döndürün
    • Üç yanıt örneği oluşturun ve her birini işlemenin sonucunu yazdırın:
      • Please wait... mesajına sahip bir Loading
      • User profile loaded verisine ve 200 durum koduna sahip bir Success
      • Not found hata mesajına ve 404 hata koduna sahip bir Error

Mühürlü sınıfların güzelliği, derleyicinin her olası yanıt türünü işlemenizi sağlamasıdır - varsayılan (default) bir duruma gerek yoktur!

Beklenen çıktı:

Status: Please wait...
Success (200): User profile loaded
Error (404): Not found

Kendin dene

import 'response.dart';

// TODO: Bir handleResponse(NetworkResponse response) fonksiyonu oluşturun
// bir String döndüren
// Her durumu ele almak için desen eşleştirmeli (pattern matching) bir switch ifadesi kullanın:
// - Loading için: "Status: [message]" döndürün
// - Success için: "Success ([statusCode]): [data]" döndürün
// - Error için: "Error ([errorCode]): [errorMessage]" döndürün

void main() {
  // TODO: "Please wait..." mesajına sahip bir Loading örneği oluşturun
  
  // TODO: "User profile loaded" verisine ve 200 durum koduna sahip bir Success örneği oluşturun
  
  // TODO: "Not found" hata mesajına ve 404 hata koduna sahip bir Error örneği oluşturun
  
  // TODO: Her bir yanıtı işlemenin sonucunu 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