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.
Görev
KolaySealed 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
NetworkResponseadlı bir sealed sınıf Loadingalanına sahip veNetworkResponsesınıfını genişleten birString messagesınıfı (örneğin, "Fetching data...")Successalanına veNetworkResponsealanına sahip,String datasınıfını genişleten birint statusCodesınıfıErroralanına veNetworkResponsealanına sahip,String errorMessagesınıfını genişleten birint errorCodesınıfı
- Tüm yanıt türlerinin temelini oluşturan
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ı veStringdöndüren bir işlev oluştur- Her durumu ele almak için desen eşleştirmeli bir switch ifadesi kullan:
Loadingiçin:Status: [message]döndürSuccessiçin:Success ([statusCode]): [data]döndürErroriçin:Error ([errorCode]): [errorMessage]döndür
- Üç yanıt örneği oluştur ve her birini işlemenin sonucunu yazdır:
Loadingmesajına sahip birPlease wait...Successverisine veUser profile loadeddurum koduna sahip bir200Errorhata mesajına veNot foundhata koduna sahip bir404
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 foundKendin 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
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama13İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımGenişletme MetotlarıÇağrılabilir SınıflarMühürlü Sınıflar (Dart 3)Kayıtlar (Dart 3)Desenler ve Eşleştirme (3.0)Metot İçeren Enum'lar2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi