Dart-Anonim Fonksiyonlar

AbdullahTaş
3 min readNov 23, 2020

Anonim Fonksiyon Nedir?

Dart dilinde anonim fonksiyon, bir adı olmayan fonksiyondur.

//DART DİLİNDE NORMAL FONKSİYON
void main(){
AdiOlanFonksiyon();
}
var AdiOlanFonskiyon(){
print("BEN ADI OLAN BİR FONKSİYONUM");
}
//DART DİLİNDE ANONİM FONKSİYON
void main(){
}(){print("BEN ADI OLMAYAN FONKSİYONUM");}

Yukarıda vermiş olduğum kod bloğunda aradaki farkı iyice anlamanız adına normal ve anonim fonksiyon örneklerini beraber verdim. Yalnız kod bloğunu dikkatli incelediyseniz, normal fonksiyonları main bloğu içinde çağırıp,çalıştırırken anonim fonksiyonları çalıştırmadım. Bunun nedeni anonim fonksiyonları çalıştırma yöntemlerini size göstermek için.

ANONİM FONKSİYONLAR NASIL ÇALIŞTIRILIR?

Anonim fonksiyonları çalıştırmak için bir değişkene atayabiliriz. Aşağıda vermiş olduğum kod bloğunu dikkatlice incelidikten sonra açıklamaya devam edelim.

void main(){
BanaFonksiyonAta();
}
var BanaFonksiyonAta = (){print("BEN ANONİM FONKSİYONUM");}
//DAHA RAHAT GÖRMENİZ İÇİN SATIRLARI AÇALIMvoid main(){
BanaFonksiyonAta();
}
var BanaFonksiyonAta = ()
{
print("BEN ANONİM FONKSİYONUM");
}

Kodları daha rahat incelemeniz için satırlarıda açtım. Eğer kodları dikkatlice inceleydiyseniz devam edelim.

Neler yaptık;

  • Öncelikle main bloğunun dışına “BanaFonksiyonAta” adında bir değişken tanımladık.
  • Daha sonra bu değişkene atamak için anonim bir fonksiyon oluşturduk.
  • Bu anonim fonksiyona da çalıştırıldığı zaman ekrana bir şeyler yazması için print metodunu verdik.
  • Eğer buraya kadar okuyup anlamadıysanız lütfen kod bloklarını çalıştırdığınız editöre yazıp kendiniz uygulayınız.

Bu yazıyı okuyan bazı arkadaşlarımız bilirki normal fonksiyonları kısaltarak yazabiliyorduk. Peki bu anonim fonksiyonlar içinde geçerli mi derseniz cevabı evet! Normal fonksiyonlar gibi anonim fonksiyonlarda kısaltılarak yazılabilir. Şimdi dilerseniz onunla ilgili örnek bir kod bloğunu sizinle paylaşayım.

void main(){
KisaltilmisAnonimFonksiyon();
}
var KisaltilmisAnonimFonksiyon=()=>print("BEN KISALTILMIŞ BİR ANONİM FONKSİYONUM");

Burada yukarıda anlatmış olduğum “anonim fonksiyonları değişkene atayıp çalıştırma” işleminin aynısını yaptım tek farkı bu sefer uzun uzadıya yazmak yerine fonksiyonu kısaltmak oldu. Bu kısaltma işlemini yaparken şişman ok(=>) diye tabir edebileceğim simgeleri kullandık. =>, eşittir ve büyüktür işaretlerini kullanarak bir şişman ok simgesi yarattık =) Eğer bu şişman oku kullanmak istemezsek,kafamızı karıştırıyorsa süslü parantez kullanmamızında bir sakıncası yok. Ancak kısaltma işleminin anonim fonksiyonlar için pratiklik dışında bir faydası daha var.Oda “bir fonksiyonu başka bir fonksiyona parametre olarak gönderebilme.” Hadi gelin şimdi hepberaber bu olayı inceleyelim.

BİR FONKSİYONA PARAMETRE OLARAK BAŞKA BİR FONKSİYON GÖNDERME

Hepimizin bildiği üzre fonksiyonlar parametlerde alır. Aldıkları parametlere göre işlem devamlılığı sağlarlar. Peki bu işler anonim fonksiyon tarafında nasıl işliyor? Şimdi aşağıdaki kod bloğunu dikkatlice inceleyelim.

void main(){SayilariUretmeFabrikasi(AnonimFonksiyonlarlaToplama);}var AnonimFonksiyonlarlaToplama=(x,y)=>(print(x+y)); //ANONİM FONKSİYONUMUZSayilariUretmeFabrikasi(Sayilar){                    //ANONİM FONKSİYONA PARAMETRE GÖNDERDİĞİMİZ FONKSİYONUMUZSayilar(5,8);}

Şimdi neler yaptığımızı açıklayalım.

  • Öncelikle “x ve y” adında parametleri olan bir anonim fonksiyon oluşturduk
  • Anonim fonksiyomuzu atamak için “AnonimFonksiyonlarlaToplama” adında bir değişken oluşturduk.
  • Daha sonra anonim fonksiyomuza parametre gönderecek fonksiyonu oluşturduk.
  • Parametreyi gönderebilmesi için “Sayilar”adında bir parametre daha oluşturduk.
  • Oluşturulan bu parametreye de “5 ve 8” değerlerini verdik
  • Son olarak anonim fonksiyonun çalışıp kendisine parametre olarak gönderilen sayıları toplaması için main bloğu içersinde “SayilariUretmeFabrikasi” adlı fonksiyonumuza parametre olarak “AnonimFonksiyonlarlaToplama” fonksiyonunu verdik.

Biraz daha açıklamaya çalışayım;

  • SayilariUretmeFabrikasi sayilar adında parametre alıyor. Bu parametre içersinde iki adet sayı tutuyor.
  • Anonim fonksiyonumuz ise kendisine gönderilen x ve y adındaki parametleri toplayıp ekrana yazdırıyor
  • Main bloğu içinde yapılan işlem SayilariUretmeFabrikasi içerisine AnonimFonksiyonlarlaToplama adlı parametreyi alıyor. Bakıyor bu parametre ne yapıyor kendisine verilen iki sayıyı toplayıp ekrana yazdırıyor.
  • E SayilariUretmeFabrikasi adı üzerinde sayı üretiyor. Ürettiği yani bizim elle gireceğimiz sayıları bu fabrika nerede tutacak tabiki fabrika içerisinde ki depolarda yani Sayilar adlı parametre içerisinde.
  • SayilariUretmeFabrikasi’nin içinde şimdi ne var sayilar adlı bir depo yani 5 ve 8 sayıları.
  • E AnonimFonksiyonlarlaToplama fonksiyonu ne yapıyordu adı üzerinde toplama.4
  • Şimdi biz main bloğu içinde SayilariUretmeFabrikasi deyip yanına bir de AnonimFonksiyonlarlaToplama adlı fonksiyonu çağırırsak ne yapar? Tabiki üretilen sayıları fabrikadan alıp toplama işlemi yapar ve ekrana yazar.

Programcası: SayilariUretmeFabrikasi adlı fonksiyonumuz içerisine anonim bir fonksiyon AnonimFonksiyonlarlaToplama adlı parametreyi alır ve SayilariUretmeFabrikasi’nin parametresinin(Sayilar)içinde barındırdığı/kendisine gönderdiği sayıları toplar ve ekrana yazar.

Peki size bir soru. Anonim fonksiyonları bir değişkene atamadan yukarıda ki kod bloğunda çalıştırabilir miydik?

Gelin bu sorunun yanıtın aşağıdaki kod bloklarında arayalım.

void main(){
SayilariUretmeFabrikasi((x,y)=>(print(x+y)));
}

SayilariUretmeFabrikasi(Sayilar){
Sayilar(5,8);

}
  • Bir önceki örnek kodlarda görmüş olduğumuz “AnonimFonksiyonlarlaToplama” adlı değişkeni sildik.
  • Anonim fonksiyonu main bloğu içerisinde parametre bekleyen fonksiyonumuza direkt olarak yazdık. İşlem bu kadar.

Umarım sizlere faydalı bir içerik olur. Eksik,yanlış bir bilgi veya kısım varsa eğer lütfen tarafıma bildirin!

İyi çalışmalar kolaylıklar dilerim =)

Benim ve yazılarım hakkında daha fazlası için => www.abdullahtas.net

--

--

AbdullahTaş

Bilgisayar Programıcısı-AÖF Yönetim Bilişim Sistemleri/DART&FLUTTER