call() Metodu
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 73 / 110.
Dart, bir nesneyi bir fonksiyonmuş gibi kullanmanıza olanak tanıyan call() adlı özel bir metoda sahiptir. Bir sınıf bir call() metodu tanımladığında, o sınıfın örneklerini fonksiyon çağırma sözdizimini kullanarak çağırabilirsiniz.
class Multiplier {
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.call(5) yazmak yerine, sadece double(5) yazabilirsiniz. Nesne üzerinde parantez kullandığınızda Dart, call() metodunu otomatik olarak çağırır.
call() metodu, tıpkı normal bir metot gibi herhangi bir parametre kabul edebilir ve herhangi bir tür döndürebilir:
class Greeter {
String prefix;
Greeter(this.prefix);
String call(String name, {String punctuation = '!'}) {
return '$prefix, $name$punctuation';
}
}
void main() {
var hello = Greeter('Hello');
print(hello('Alice')); // Hello, Alice!
print(hello('Bob', punctuation: '?')); // Hello, Bob?
}Bu desen, fonksiyon gibi davranan ancak aynı zamanda durum veya yapılandırma bilgisini koruyan nesnelere ihtiyaç duyduğunuzda kullanışlıdır. Çağrılar arasında ayarları hatırlaması gereken yeniden kullanılabilir işlemler, doğrulayıcılar veya biçimlendiriciler oluşturmak için yaygın olarak kullanılır.
Görev
KolayFormatlayıcı nesnelerin doğrudan fonksiyonlar gibi çağrılabildiği bir metin formatlama sistemi oluşturalım! Yapılandırma ayarlarını korurken metni farklı şekillerde dönüştüren çağrılabilir (callable) sınıflar oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
formatters.dart: Dizeleri dönüştüren iki çağrılabilir sınıf oluşturun:- Metni yapılandırılabilir bir ön ek (prefix) ve son ek (suffix) ile saran bir
Wrappersınıfı. Bu sınıfprefixvesuffixdizelerini saklamalıdır vecall()metodu birString textkabul edip metni ön ek ve son ek ile sarılmış halde döndürmelidir. - Metni yapılandırılabilir sayıda tekrar eden bir
Repeatersınıfı. Bu sınıf birtimestam sayısı saklamalıdır vecall()metodu birString textkabul edip metni aralarında boşluk olacak şekilde o kadar kez tekrarlanmış halde döndürmelidir.
- Metni yapılandırılabilir bir ön ek (prefix) ve son ek (suffix) ile saran bir
main.dart: Formatlayıcılarınızı içe aktarın ve bu nesnelerin tıpkı fonksiyonlar gibi nasıl kullanılabileceğini gösterin:'['ön eki ve']'son eki ile birWrapperoluşturun'***'ön eki ve'***'son eki ile başka birWrapperoluşturuntimesdeğeri3olarak ayarlanmış birRepeateroluşturun- İlk wrapper'ı
'Hello'ile çağırın ve sonucu yazdırın - İkinci wrapper'ı
'Important'ile çağırın ve sonucu yazdırın - Repeater'ı
'Go'ile çağırın ve sonucu yazdırın - İlk wrapper'ın sonucunu (
'Nested'ile) ikinci wrapper'a geçirerek zincirlemeyi gösterin ve sonucu yazdırın
Formatlayıcı nesnelerinizi tıpkı normal fonksiyonlar gibi parantez kullanarak doğrudan nasıl çağırabildiğinize dikkat edin. call() metodu bunu mümkün kılar ve her nesne kullanımlar arasında kendi yapılandırmasını hatırlar!
Beklenen çıktı:
[Hello]
***Important***
Go Go Go
***[Nested]***Kendin dene
import 'formatters.dart';
void main() {
// TODO: '[' öneki ve ']' soneki ile bir Wrapper oluşturun
// TODO: '***' öneki ve '***' soneki ile başka bir Wrapper oluşturun
// TODO: times değeri 3 olan bir Repeater oluşturun
// TODO: İlk wrapper'ı 'Hello' ile çağırın ve sonucu yazdırın
// TODO: İkinci wrapper'ı 'Important' ile çağırın ve sonucu yazdırın
// TODO: Repeater'ı 'Go' ile çağırın ve sonucu yazdırın
// TODO: İlk wrapper'ın sonucunu ('Nested' ile) ikinci wrapper'a
// geçirerek zincirlemeyi gösterin ve sonucu 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 Depolama2Dart'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