Çağrılabilir Sınıflar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 84 / 110.
Dart'ta, call() metodunu uygulayarak bir sınıfın örneklerini fonksiyonlar gibi çağrılabilir hâle getirebilirsin. Bu, bir nesneyi fonksiyon çağrısı söz dizimiyle kullanmanı sağlar; yani parantezleri doğrudan örneğin üzerinde kullanabilirsin.
class Multiplier {
final int factor;
Multiplier(this.factor);
int call(int value) {
return value * factor;
}
}
void main() {
var double = Multiplier(2);
var triple = Multiplier(3);
print(double(5)); // 10 - nesneyi bir fonksiyon gibi çağırma
print(triple(5)); // 15
}double(5) yazdığınızda Dart, 5 değerini bağımsız değişken olarak kullanarak call() yöntemini otomatik olarak çağırır. Nesne, durumunu (factor alanını) korurken bir işlev gibi davranır.
call() yöntemi herhangi bir imzaya sahip olabilir - birden fazla parametre, isteğe bağlı parametreler ve hatta farklı türler döndürebilir:
class Greeter {
final String greeting;
Greeter(this.greeting);
String call(String name, {String punctuation = '!'}) {
return '$greeting, $name$punctuation';
}
}
void main() {
var hello = Greeter('Hello');
print(hello('Alice')); // Hello, Alice!
print(hello('Bob', punctuation: '.')); // Hello, Bob.
}Çağrılabilir sınıflar, durum veya yapılandırmayla birleştirilmiş işlev benzeri davranışa ihtiyaç duyduğunuzda kullanışlıdır. Genellikle çağrılar arasında ayarları hatırlaması gereken yeniden kullanılabilir işlemler, doğrulayıcılar veya dönüşümler oluşturmak için kullanılırlar.
Görev
KolayÇağrılabilir sınıfları kullanarak bir metin biçimlendirici sistemi oluşturalım! Metni farklı şekillerde dönüştürmek için işlevler gibi çağrılabilen ve kendi yapılandırma ayarlarını koruyan nesneler oluşturacaksın.
Kodunu iki dosyada düzenleyeceksin:
formatters.dart: Metni dönüştüren iki çağrılabilir sınıf oluştur:- Metni bir ön ek ve son ek ile saran bir
Wrappersınıfı. Bu sınıf birString prefixveString suffixsaklamalı veString textparametresiyle çağrıldığında, metni ön ek ile son ek arasına sarılmış şekilde döndürmelidir. - Metni belirli sayıda tekrarlayan bir
Repeatersınıfı. Bu sınıf birint timesdeğeri saklamalı veString textparametresiyle çağrıldığında, metni her tekrarın arasında bir boşluk olacak şekilde belirtilen sayıda tekrarlamalıdır.
- Metni bir ön ek ve son ek ile saran bir
main.dart: Biçimlendiricilerini içe aktar ve çağrılabilir sınıfların nasıl çalıştığını göster:Wrapperön eki ve"["son ekiyle bir"]"oluşturWrapperön eki ve"***"son ekiyle başka bir"***"oluştur- 3 kez tekrarlayan bir
Repeateroluştur - İlk sarmalayıcıyı
"Hello"ile çağır ve sonucu yazdır - İkinci sarmalayıcıyı
"Important"ile çağır ve sonucu yazdır - Tekrarlayıcıyı
"Go"ile çağır ve sonucu yazdır - Son olarak bunları birleştir: ilk sarmalayıcıyı, tekrarlayıcının
"Dart"ile çağrılmasının sonucuyla çağır ve sonucu yazdır
Her biçimlendirici nesnesinin kendi yapılandırmasını nasıl hatırladığına ve tıpkı bir işlev gibi doğrudan parantezlerle çağrılabildiğine dikkat et!
Beklenen çıktı:
[Hello]
***Important***
Go Go Go
[Dart Dart Dart]Kendin dene
import 'formatters.dart';
void main() {
// TODO: "[" öneki ve "]" soneki ile bir Wrapper oluştur
// TODO: "***" öneki ve "***" soneki ile başka bir Wrapper oluştur
// TODO: 3 kez tekrarlayan bir Repeater oluştur
// TODO: İlk wrapper'ı "Hello" ile çağır ve sonucu yazdır
// TODO: İkinci wrapper'ı "Important" ile çağır ve sonucu yazdır
// TODO: Repeater'ı "Go" ile çağır ve sonucu yazdır
// TODO: Bunları birleştir: ilk wrapper'ı şunun sonucuyla çağır
// repeater'ı "Dart" ile çağırarak, ve sonucu yazdır
}
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