Closure'ları Anlamak
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 46 / 65.
Bir closure, oluşturulduğu yerdeki değişkenleri, orijinal bağlamın çalışması bittikten sonra bile "hatırlayan" özel bir fonksiyon türüdür. Onu, gittiği her yere doğduğu yerden bir parça taşıyan bir fonksiyon olarak düşünün.
Bir fonksiyonu başka bir fonksiyonun içinde oluşturduğunuzda, içteki fonksiyon dıştaki fonksiyonun değişkenlerine erişebilir. Bunu bir closure yapan şey, bu erişimin dıştaki fonksiyonun yürütülmesi tamamlandıktan sonra bile devam etmesidir.
Function createGreeting(String name) {
return () {
return "Hello, $name!";
};
}Bu örnekte, createGreeting tarafından döndürülen anonim fonksiyon bir closure'dır. Çevreleyen kapsamındaki name parametresini yakalar. createGreeting çalışmasını bitirdikten sonra bile, döndürülen fonksiyon name değişkeninin ne olduğunu hala hatırlar.
Closure'lar, özelleştirilmiş fonksiyonlar oluşturmak veya durumu temiz bir şekilde korumak için inanılmaz derecede kullanışlıdır. Oluşturuldukları ortama göre özelleştirilen fonksiyonlar oluşturmanıza olanak tanıyarak kodunuzu daha esnek ve güçlü hale getirirler.
Görev
KolayKişiselleştirilmiş bir mesaj oluşturma sistemi kurarak closure'ları (kapanışları) gösteren bir program oluşturun. Programınız, belirli bilgileri "hatırlayan" ve orijinal bağlam sona erdikten sonra bile bu bilgileri özelleştirilmiş mesajlar oluşturmak için kullanan fonksiyonlar oluşturacaktır.
- Bir kişinin adını temsil eden bir dize (string) girdisi okuyun
- Bir selamlama türünü temsil eden bir dize girdisi okuyun (
"formal","casual"veya"friendly") - Bir şirket adını temsil eden bir dize girdisi okuyun
- Parametre olarak bir ad ve selamlama türü alan
createMessageGeneratoradında bir fonksiyon oluşturun createMessageGeneratorfonksiyonu, şunları yapan başka bir fonksiyon (bir closure) döndürmelidir:- Parametre olarak bir şirket adı alır
- Dış fonksiyonun kapsamındaki (scope) adı ve selamlama türünü kullanır
- Selamlama türüne göre biçimlendirilmiş bir mesaj döndürür:
"formal"için:"Dear [name], we are pleased to welcome you to [company].""casual"için:"Hey [name]! Welcome to [company]!""friendly"için:"Hi [name], so glad you joined [company]!"- Closure fonksiyonunuzu elde etmek için
createMessageGeneratorfonksiyonunu ad ve selamlama türü girdileriyle çağırın - Mesajı oluşturmak için döndürülen closure fonksiyonunu şirket adı girdisiyle çağırın
- Sonuçları aşağıda gösterilen tam formatta görüntüleyin
Örneğin, girdiler "Alice", "formal" ve "TechCorp" ise, programınızın çıktısı şöyle olmalıdır:
Message Generator System
========================
Creating message generator for: Alice
Greeting type: formal
Company: TechCorp
========================
Generated message: Dear Alice, we are pleased to welcome you to TechCorp.
Message generation completed successfullyGirdiler "Bob", "casual" ve "StartupXYZ" ise, programınızın çıktısı şöyle olmalıdır:
Message Generator System
========================
Creating message generator for: Bob
Greeting type: casual
Company: StartupXYZ
========================
Generated message: Hey Bob! Welcome to StartupXYZ!
Message generation completed successfullyGirdiler "Carol", "friendly" ve "InnovateLab" ise, programınızın çıktısı şöyle olmalıdır:
Message Generator System
========================
Creating message generator for: Carol
Greeting type: friendly
Company: InnovateLab
========================
Generated message: Hi Carol, so glad you joined InnovateLab!
Message generation completed successfullyProgramınız, başka bir fonksiyon döndüren bir fonksiyon oluşturarak closure'ları göstermelidir. Döndürülen fonksiyon (closure), dış fonksiyonun yürütülmesi bittikten sonra bile dış fonksiyonun kapsamındaki değişkenlere (ad ve selamlama türü) erişebilmelidir. Selamlama türü girdisine göre uygun mesaj formatını belirlemek için koşullu ifadeler kullanın.
Kopya kağıdı
Bir closure (kapanış), oluşturulduğu yerdeki değişkenleri, orijinal bağlamın çalışması bittikten sonra bile "hatırlayan" bir fonksiyondur.
Bir fonksiyonu başka bir fonksiyonun içinde oluşturduğunuzda, içteki fonksiyon dıştaki fonksiyonun değişkenlerine erişebilir. Bu erişim, dıştaki fonksiyonun yürütülmesi tamamlandıktan sonra bile devam eder.
Function createGreeting(String name) {
return () {
return "Hello, $name!";
};
}Bu örnekte, createGreeting tarafından döndürülen anonim fonksiyon bir closure'dır. Çevreleyen kapsamdaki name parametresini yakalar. createGreeting çalışmasını bitirdikten sonra bile, döndürülen fonksiyon name değişkeninin ne olduğunu hala hatırlar.
Closure'lar, özelleştirilmiş fonksiyonlar oluşturmak veya durumu temiz bir şekilde korumak için kullanışlıdır. Oluşturuldukları ortama göre özelleştirilmiş fonksiyonlar oluşturmanıza olanak tanırlar.
Kendin dene
import 'dart:io';
void main() {
// Girişi oku
String? name = stdin.readLineSync();
String? greetingType = stdin.readLineSync();
String? company = stdin.readLineSync();
// Sistem başlığını görüntüle
print("Message Generator System");
print("========================");
print("Creating message generator for: $name");
print("Greeting type: $greetingType");
print("Company: $company");
print("========================");
// TODO: Kodunuzu aşağıya yazın
// Bir closure döndüren createMessageGenerator fonksiyonunu oluşturun
// Fonksiyonu çağırın ve mesajı oluşturun
// Nihai sonuçları çıktı olarak ver
print("Generated message: \$message");
print("Message generation completed successfully");
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli Listesi