Menu
Coddy logo textTech

Mühürlü 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ı 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 sınıfların gücü, tüm durumların denetlenmesinden gelir. Sealed bir 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
}

Mühürlü bir sınıfa yeni bir alt tür eklerseniz, derleyici onu ele almayan her switch ifadesini işaretler. Bu, mühürlü sınıfları durumları, sonuçları veya sabit bir varyant kümesine sahip olduğunuz herhangi bir senaryoyu modellemek için ideal kılar. Soyut sınıfların aksine, mühürlü sınıflar hiçbir harici kodun beklenmedik alt türler ekleyememesini garanti eder.

challenge icon

Görev

Kolay

Sealed sınıfları kullanarak bir ağ isteği işleyicisi oluşturalım! Bir ağ yanıtının farklı durumlarını modelleyen ve olası her sonucun doğru şekilde ele alınmasını sağlayan tür güvenli bir sistem oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • response.dart: Bir ağ yanıtının tüm olası durumlarını temsil eden bir sealed sınıf hiyerarşisi oluştur:
    • Tüm yanıt türlerinin temelini oluşturan NetworkResponse adlı bir sealed sınıf
    • Loading alanına sahip ve NetworkResponse sınıfını genişleten bir String message sınıfı (örneğin, "Fetching data...")
    • Success alanına ve NetworkResponse alanına sahip, String data sınıfını genişleten bir int statusCode sınıfı
    • Error alanına ve NetworkResponse alanına sahip, String errorMessage sınıfını genişleten bir int errorCode sınıfı
  • main.dart: Yanıt dosyanı içe aktar ve bir switch ifadesi kullanarak tüm yanıt türlerini ele alan bir işlev oluştur:
    • handleResponse(NetworkResponse response) adlı ve String döndüren bir işlev oluştur
    • Her durumu ele almak için desen eşleştirmeli bir switch ifadesi kullan:
      • Loading için: Status: [message] döndür
      • Success için: Success ([statusCode]): [data] döndür
      • Error için: Error ([errorCode]): [errorMessage] döndür
    • Üç yanıt örneği oluştur ve her birini işlemenin sonucunu yazdır:
      • Loading mesajına sahip bir Please wait...
      • Success verisine ve User profile loaded durum koduna sahip bir 200
      • Error hata mesajına ve Not found hata koduna sahip bir 404

Sealed sınıfların güzelliği, derleyicinin olası her yanıt türünü ele aldığından emin olmasıdır; varsayılan 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

Kendi başına pratik yap: Online Dart derleyicisi