DART-Üst Düzey Fonksiyonlar

AbdullahTaş
4 min readNov 24, 2020

--

DART-Üst Düzey Fonksiyonlar

DART-Üst Düzey Fonksiyonlar yazımla sizlerleyim. Bu yazımızda üç tane üst düzey olan fonksiyonuna değineceğiz. Çok fazla uzatmadan sizleri hemen fonksiyonlarımızla tanıştırıp ne iş yaptıklarını açıklayayım.

Foreach: Listenin elemanlarını ekrana yazdırmak için kullanırız.

Where: Listeden yeni bir liste oluşturmak için kullanırız.

Map:Listeden yeni bir liste oluşturmak için kullanırız.

Bir şey dikkatinizi çekti değil mi? Where ve Map için aynı açıklamayı yazdım. İkisi de aynı şeyi yapıyorsa neden sadece where ya da map kullanılmıyor? Çünkü listeden yeni bir liste oluştururken bu iki fonksiyon ayrı ayrı işlemlere tabi tutuyor listemizi.

WHERE

Where ile listeden yeni bir liste yaratırken aynı zamanda listemizdeki elemanları belirlediğimiz şartlara uyuyor mu diye kontrol eder. Where metoduna biraz yakından bakmak için aşağıdaki görseli inceleyelim.

Where ile başlayan kısma dikkat edersek bizden bool tipinde yani true ya da false değer döndüren tipte bir fonksiyon istiyor. Bu fonksiyon ile yaratacağımız kurallar (örn: listedeki sayılardan 5'ten küçük olanları getirme) listeden yeni bir liste oluşturmamızda bize yardımcı olacak. Map metoduna geçmeden önce where metodumuzla alakalı bir örnek paylaşmak istiyorum.

void main() { List<String> harfler= ["a","b","c","d"]; //STRING TIPTE LİSTE OLUŞTURDUK 
print(harfler.where(kontrol)); //LİSTEYİ WHERE İLE KONTROL EDİP EKRANA YAZDIRDIK
}
bool kontrol(String harf){ // BOOL TIPINDE KONTROL ADLI FONKSİYONU OLUŞTURUP,HARF ADINDA STRING PARAMETRE VERDIK
return harf== "a"; // LİSTEDE A HARFİ İLE EŞLEŞEN BİR HARF VAR MI DİYE SORUYORUZ EĞER VARSA
} // YANİ TRUE İSE YUKARIDA YAZMIŞ OLDUĞUMUZ PRİNT İLE EKRANA YAZDIRIYORUZ

Yukarıda ki kodlarımızı inceleyelim ve ne yaptığımızı anlamaya çalışalım.

  • İlk önce String tipte -int’de olabilir- bir liste oluşturduk ve içine string tipte veriler girdik.
  • Daha sonra main bloğunun dışına where metodunun gereksinimi olan bool tipinde bir fonksiyon oluşturuyoruz
  • Oluşturduğumuz bu fonksiyonun içinde bir kontrol oluşturuyoruz. -Bizim örneğimizde listeyi kontrol edip “a” harfine eşit olan harf var mı diye kontrol ediyoruz”
  • Son olarak main bloğunun içine kontrol şartlarını sağlayan liste varsa/oluştuysa ekrana yazması için print metodunun içersine alıyoruz.
  • harfler.where(kontrol); kod bloğu listeden yeni liste oluşturulurken listeyi kontrol ediyor başka bir deyişle listeyi süzüp,filtreliyor.

Daha da pekişmesi ve anlaşılması için bir de “int” tipinde bir liste ile örnek kod paylaşıyorum sizlerle.

void main() {
List<int> sayilar = [1,2,3,4,5,6,7];
print(sayilar.where(kontrol));

}
bool kontrol(int sayi){
return sayi>3;
}
/*
* Diğer örnek kodlardaki işlemlerin aynısını yaptık
* değişen sadece liste tipi ve kontrol fonksiyonumuz oldu
* bu örnekte listede üçten büyük eleman var mı diye kontrol ettik
* ve varsa bunu ekrana yazdık.
* */

Where ve Map aynı işi yapıyor görünselerde aslında işin arka planında farklı olaylar çeviriyorlar. Where ile listemizi filtreleyip yeni bir liste oluşturduğumuzu biliyoruz. Bu yapbozda eksik kalan parçayı tamamlamak için Map yapısına geçebiliriz.

MAP

Map yapısı listeden yeni bir liste oluştururken var olan liste elemanları üzerinde değişiklik yapar. Where’de olduğu gibi Map’te yine bu işlem için bir fonksiyona ihtiyaç duyar. Lafı uzatmadan hemen örneğine geçelim ve örnek üzerinden anlama çalışalım.

void main() {
List<int> sayilar = [1,2,3,4,5,6,7];
print(sayilar.map(kontrol));

}
kontrol(int sayi){
return sayi+3;
}

Yukarıda ki kodlarımızı inceleyelim ve ne yaptığımızı anlamaya çalışalım.

  • int tipinde bir liste oluşturduk.
  • kontrol adında bir fonksiyon ve fonksiyon parametresi olarak int tipinde bir parametre oluşturduk
  • hemen sonra fonksiyonumuza”var olan liste elemanlarını değiştirmesini ve parametremize listedeki sayılara üç ekleyip ve bu sonucu döndürmesini “ söylüyoruz.
  • main bloğu içinde ise map yapısının bu kontrolu gerçekleştirip var olan listeyi güncellemesini ve yeni bir liste oluşturarak ekrana yazdırmasını istiyoruz.

*Buraya kadar olan kısmı özetleyecek olursak “where metodu ile filtreleme”, “map metodu ile değişiklik” yapıyoruz.

toList()

Bu kod bloklarını çalıştırdıysanız eğer sonuçlar parantezler içerisinde gelmiş olmalı. Ancak biz tanımları yaparken listeden yeni bir liste oluştururlar demiştik. Kodlarımızda ilk başta liste oluştururken liste sembolü olan köşeli parantezleri kullandık ancak ne where ne de map ile çıktı alırken bu köşeli parantezler çıkmıyor ve dolayısıyla listeden yeni bir liste oluşturamamış oluyoruz. Bu sorunu gidermek için dart alet çantasında toList() bulunmakta.

Kod bloklarımızda yer alan print metodu içeriside fonksiyonumuzun sonuna “.toList()” koymamız işlemi başarlı bir şekilde sonlandırmamız için yeterli olacaktır.

void main() {
List<int> sayilar = [1,2,3,4,5,6,7];
print(sayilar.map(kontrol).toList()); //BU SATIRA DİKKAT!!!

}
kontrol(int sayi){
return sayi+3;
}
//ÇIKTISI= [4,5,6,7,8,9,10]

Foreach

Liste elemanlarımızı ekrana yazdırmak için kullanıyoruz diye açıklamıştık. Çok uzatmadan hemen örneğimizi yapalım.

void main() {
List<int> sayilar = [1,2,3,4,5,6,7];
sayilar.forEach((eleman)=>print(eleman));
}

Yukarıda ki kodlarımızı inceleyelim ve ne yaptığımızı anlamaya çalışalım.

  • sayilar adında int tipinde bir liste oluşturduk
  • foreach metodu geriye değer döndermeyen yani void tipinde bir fonksiyona ihtiyaç duyar
  • void tipinde anonim bir fonksiyon oluşturduk
  • anonim fonksiyonun görevi foreach ile tüm listeyi dolaşıp listenin elemanları eleman parametresine tek tek aktarıp ekrana yazdırmak.

*Eğer anonim fonksiyon nedir,nasıl oluşturulur ve çalıştırılır bilmiyorsanız lütfen buraya tıklayın ve ilgili yazıyı okuyun

**İlla anonim fonksiyon kullanmak zorunda değiliz. Dilerseniz anonim olmayan fonksiyonda kullanabilirsiniz.Onunda örneğini aşağıya bırakıyorum.

void main() {
List<int> sayilar = [1,2,3,4,5,6,7];
sayilar.forEach(elemanYazdir);

}
elemanYazdir(eleman){
print(eleman);
}

Bir yazının daha sonuna geldik umarım sizler için bilgilendirici ve faydalı olmuştur.Eksik ya da hatalı olarak gördüğünüz yerleri tarafıma lütfen bildirin!

İyi çalışmalar =)

--

--

AbdullahTaş

Bilgisayar Programıcısı-AÖF Yönetim Bilişim Sistemleri | |Exp Freelancer Flutter Developer | Founder Netabil