Metot İçeren Enum'lar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 88 / 110.
Dart'ta enum'lar yalnızca basit sabit listeleri değildir; alanlara, yapıcılara ve metotlara sahip olabilirler. Bu da onları güçlü mini sınıflar hâline getirir. Buna gelişmiş enum'lar adı verilir ve davranışları ve verileri doğrudan her enum değerine eklemenizi sağlar.
enum Status {
pending('Waiting'),
approved('Accepted'),
rejected('Denied');
final String displayName;
const Status(this.displayName);
bool get isFinalized => this == approved || this == rejected;
}
void main() {
var status = Status.pending;
print(status.displayName); // Waiting
print(status.isFinalized); // false
print(Status.approved.isFinalized); // true
}Her enum değeri, kendine özgü bağımsız değişkenleriyle oluşturucuyu çağırır. Oluşturucu const olmalı ve tüm alanlar final olmalıdır. Enum’un verileriyle çalışan veya diğer değerlerle karşılaştırma yapan getter’lar ve metotlar ekleyebilirsin.
Gelişmiş enum'lar, arayüzleri de uygulayabilir ve böylece onlara daha da fazla esneklik kazandırır:
enum Priority implements Comparable<Priority> {
low(1),
medium(2),
high(3);
final int level;
const Priority(this.level);
@override
int compareTo(Priority other) => level.compareTo(other.level);
}
void main() {
var tasks = [Priority.high, Priority.low, Priority.medium];
tasks.sort();
print(tasks); // [Priority.low, Priority.medium, Priority.high]
}Geliştirilmiş enum'lar, her birinin kendisiyle ilişkilendirilmiş verilere veya davranışa ihtiyaç duyduğu sabit bir değer kümesine sahip olduğunuzda idealdir; örneğin mesajları olan durum kodları, seviyeleri olan öncelikler veya koordinatları olan yönler.
Görev
KolayGeliştirilmiş enum'ları kullanarak bir görev yönetimi sistemi oluşturalım! Farklı görev kategorilerini temsil eden bir enum oluşturacak ve her bir kategoriye, çalışmayı düzenlemeye ve önceliklendirmeye yardımcı olan kendine özgü özellikler ve davranışlar ekleyeceksin.
Kodunu iki dosyaya ayıracaksın:
task_category.dart: Bir projedeki farklı görev türlerini temsil edenTaskCategoryadlı geliştirilmiş bir enum oluştur. Her kategori şunlara sahip olmalı:- İnsan tarafından okunabilir bir ad için bir
String labelalanı - Bir
int priorityalanı (1 en yüksek, 3 en düşük önceliktir) - Her iki alanı da başlatan bir
constyapıcı - Dört enum değeri:
bug(label: "Bug Fix", priority: 1),feature(label: "New Feature", priority: 2),documentation(label: "Documentation", priority: 3) vetesting(label: "Testing", priority: 2) - Öncelik 1 ise
isUrgentdöndüren birtruegetter'ı describe()biçiminde bir dize döndüren bir[label] (Priority: [priority])metodu
Comparable<TaskCategory>arayüzünü uygulaması gerekir (daha düşük öncelik numarası = önce gelir).- İnsan tarafından okunabilir bir ad için bir
main.dart: Görev kategorisi enum'unu içe aktar ve özelliklerini göster:- Dört görev kategorisinin tümünü şu sırayla içeren bir liste oluştur:
feature,bug,documentation,testing - Her kategorinin açıklamasını
describe()metodunu kullanarak satır başına bir tane olacak şekilde yazdır - Boş bir satır yazdır
- Listeyi önceliğe göre sırala ve
After sorting by priority:yazdır - Sıralanmış her kategorinin etiketini satır başına bir tane olacak şekilde yazdır
- Boş bir satır yazdır
Urgent tasks:yazdır- Özgün sırada (
feature,bug,documentation,testing) döngüye gir ve yalnızcaisUrgentdeğeri true olan kategorilerin etiketlerini yazdır
- Dört görev kategorisinin tümünü şu sırayla içeren bir liste oluştur:
Bu görev; alanlar, yapıcılar, getter'lar, metotlar ve arayüz uygulama gibi geliştirilmiş enum özelliklerini bir araya getirerek kullanışlı bir görev kategorilendirme sistemi oluşturur!
Beklenen çıktı:
New Feature (Priority: 2)
Bug Fix (Priority: 1)
Documentation (Priority: 3)
Testing (Priority: 2)
After sorting by priority:
Bug Fix
New Feature
Testing
Documentation
Urgent tasks:
Bug FixKendin dene
import 'task_category.dart';
void main() {
// TODO: Bu sırayla dört görev kategorisinin tümünü içeren bir liste oluşturun:
// feature, bug, documentation, testing
// TODO: describe() kullanarak her kategorinin açıklamasını her satıra bir tane gelecek şekilde yazdırın
// TODO: Boş bir satır yazdırın
// TODO: Listeyi önceliğe göre sıralayın
// TODO: "After sorting by priority:" yazdırın
// TODO: Sıralanmış her kategorinin etiketini her satıra bir tane gelecek şekilde yazdırın
// TODO: Boş bir satır yazdırın
// TODO: "Urgent tasks:" yazdırın
// TODO: Orijinal sıra (feature, bug, documentation, testing) üzerinde döngü kurun
// ve yalnızca isUrgent değeri true olan kategorilerin etiketlerini 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