Fonksiyonlar (Functions)
Dart, gerçek bir nesne yönelimli dil olduğu için fonksiyonlar bile nesnelerdir ve bir tipe sahiptirler. Bu, fonksiyonların değişkenlere atanabileceği veya başka fonksiyonlara argüman olarak geçirilebileceği anlamına gelir. Ayrıca, bir Dart sınıfının bir örneğini bir fonksiyon gibi çağırabilirsiniz. Detaylar için Çağrılabilir nesneleri inceleyin.
İşte bir fonksiyonu uygulamanın bir örneği:
Dart fonksiyonlar için tür açıklamalarını önerse de, fonksiyon türü dahi atlamışsanız çalışır:
Sadece bir ifade içeren fonksiyonlar için arrow fonksiyon kullanabilirsiniz:
=> expr
sözdizimi, { return expr; }
için bir kısaltmadır. =>
arrow fonksiyon olarak da adlandırılır.
Not: Arrow (=>) ve noktalı virgül (;) arasında sadece bir ifade —bir deyim— yer alabilir. Örneğin bir if deyimini oraya koyamazsınız, ancak bir koşullu ifade kullanabilirsiniz.
Parametreler
Bir fonksiyonun herhangi bir sayıda zorunlu parametresi olabilir. Bu, adlandırılmış parametreler veya isteğe bağlı pozisyonel parametrelerle takip edilebilir (ancak ikisi birden değil).
Adlandırılmış Parametreler
Adlandırılmış parametreler, açıkça zorunlu olarak işaretlenmediği sürece isteğe bağlıdır.
Bir fonksiyon tanımlarken, adlandırılmış parametreleri belirtmek için {param1, param2, ...}
kullanın. Varsayılan bir değer sağlamaz veya adlandırılmış bir parametreyi zorunlu olarak işaretlememişseniz, türleri nullable olmalıdır, çünkü varsayılan değerleri null olacaktır:
Fonksiyonu çağırırken, paramName: value kullanarak adlandırılmış argümanları belirtebilirsiniz. Örneğin:
Bir adlandırılmış parametre için varsayılan bir değer belirtmek için = kullanın. Belirtilen değer derleme zamanında bir sabit olmalıdır:
Eğer adlandırılmış bir parametrenin zorunlu olmasını istiyorsanız, parametreleri required ile işaretleyebilirsiniz:
Eğer birisi child argümanını belirtmeden bir KaydirmaCubugu
oluşturmaya çalışırsa, analizör bir hatayı rapor eder.
Not: Zorunlu olarak işaretlenmiş bir parametre hâlâ nullable olabilir:
Pozisyonel argümanları önce koymak isteyebilirsiniz, Dart buna zorlama yapmaz.
İsteğe Bağlı Pozisyonel Parametreler
Fonksiyon parametrelerini [] içine almak, onları isteğe bağlı pozisyonel parametre olarak işaretler. Varsayılan bir değer sağlamazsanız, türleri nullable olmalıdır, çünkü varsayılan değerleri null olacaktır:
İsteğe bağlı parametre olmadan bu fonksiyonu çağırmak için örnek:
Ve üçüncü parametre ile bu fonksiyonu çağırmak için örnek:
İsteğe bağlı pozisyonel bir parametre için varsayılan bir değer belirtmek için = kullanın. Belirtilen değer derleme zamanında bir sabit olmalıdır:
main() Fonksiyonu
Her uygulamanın, uygulamanın giriş noktası olarak hizmet eden bir main() fonksiyonu olmalıdır. main() fonksiyonu void
döndürür ve opsiyonel olarak bir List<String>
parametresi alır.
İşte basit bir main() fonksiyonu:
İşte argümanları alan bir komut satırı uygulaması için main() fonksiyonunun bir örneği:
Komut satırı argümanlarını tanımlamak ve çözmek için args
kütüphanesini kullanabilirsiniz.
Birinci Sınıf Fonksiyonlar
Bir fonksiyonu başka bir fonksiyona parametre olarak iletebilirsiniz. Örneğin:
Bir fonksiyonu bir değişkene atayabilirsiniz, örneğin:
Bu örnek anonim bir fonksiyon kullanmaktadır. Daha fazlasını bir sonraki bölümde bulabilirsiniz.
Anonim Fonksiyonlar
Çoğu fonksiyon adlıdır, örneğin main()
veya elemaniYazdir()
. Bu fonksiyonu bir değişkene atayarak, bir koleksiyondan ekleyerek veya bir fonksiyonu çağırırken argüman olarak kullanarak bir koleksiyondan ekleyebilir veya kaldırabilirsiniz.
Anonim bir fonksiyon, parantez içinde sıfır veya daha fazla parametre, virgülle ayrılmış, opsiyonel tür açıklamaları ve parantez içinde fonksiyonun gövdesi olan bir kod bloğuna sahiptir:
Aşağıdaki örnek, bir listedeki her öğe için çağrılan map fonksiyonuna geçirilen bir anonim fonksiyonu tanımlar. Liste üzerinde çağrılan fonksiyon, her dizeyi büyük harfe çevirir ve ardından forEach'e geçirilen başka bir anonim fonksiyon tarafından her bir dize ve uzunluğu yazdırılır:
Eğer fonksiyon sadece bir ifade veya return ifadesi içeriyorsa, arrow fonksiyon kullanarak bunu kısaltabilirsiniz.
Leksik Kapsam
Dart, leksik olarak kapsamlı bir dildir, bu da değişkenlerin kapsamının kodun düzenine bağlı olarak statik olarak belirlendiği anlamına gelir.
İşte her kapsam düzeyinde değişkenlerle iç içe geçmiş fonksiyonlar içeren bir örnek:
Dikkat edin ki icIceFonksiyon()
, en üst düzeyden en alt düzeye kadar her düzeyden değişkenleri kullanabilir.
Leksikal Kapanışlar
Bir kapanış (closure), kendi leksikal kapsamındaki değişkenlere erişimi olan bir fonksiyon nesnesidir, fonksiyon orijinal kapsamından çıkarıldığında bile. Aşağıdaki örnekte, makeAdder() fonksiyonu addBy değişkenine erişir ve döndürülen fonksiyon, addBy'yi hatırlar:
Fonksiyonların Eşitliğini Test Etme
İşte en üst seviye fonksiyonları, statik yöntemleri ve örnek yöntemleri eşitlik için test etme örneği:
Return (Dönüş) Değerleri
Tüm fonksiyonlar bir değer döndürür. Eğer belirli bir dönüş değeri belirtilmemişse, return null ifadesi otomatik olarak fonksiyon gövdesine eklenir.
Bir fonksiyonda birden çok değer döndürmek için, değerleri bir kayıt içinde toplayabilirsiniz.
Generators (Üreteçler)
Bir değer dizisi üretmeye ihtiyaç duyduğunuzda, bir üreteç fonksiyonu kullanmayı düşünebilirsiniz. Dart, iki tür üreteç fonksiyonunu destekler:
Senkron üreteç:
Iterable
nesnesi döndürür.Asenkron üreteç:
Stream
nesnesi döndürür.
Senkron üreteç fonksiyonu uygulamak için, fonksiyon gövdesini sync*
olarak işaretleyin ve değerleri iletmek için yield ifadelerini kullanın:
Asenkron üreteç fonksiyonu uygulamak için, fonksiyon gövdesini async*
olarak işaretleyin ve değerleri iletmek için yield
ifadelerini kullanın:
Eğer üreteciniz özyineliyse (rekürsif), yield*
kullanarak performansını artırabilirsiniz:
Harici Fonksiyonlar
Bir harici fonksiyon, gövdesi bildirimi dışında bir yerde uygulanan bir fonksiyondur. Bir fonksiyon bildiriminden önce external kelimesini ekleyin, örneğin:
Bir harici fonksiyonun uygulaması başka bir Dart kütüphanesinden gelebilir veya daha yaygın olarak başka bir dilde yazılmış olabilir. Entegrasyon bağlamında, harici, Dart'ta kullanılabilir hale getirmek için yabancı fonksiyonlar veya değerler için tür bilgisi sağlar.
Harici fonksiyonlar, birinci düzey fonksiyonlar, örnek yöntemler, getter
'lar veya setter
'lar veya yönlendirici olmayan kurucular olabilir. Eğer değişken final
değilse, bir örnek değişkeni de harici olabilir ve bu, bir harici getter
ve (değişken final
değilse) bir harici setter
ile eşdeğerdir.
Last updated