Bölüm 5 — Konu 23: Arrow Function (`=>`) Sözdizimi
Dizi · 22/64 Dart Türkçe Tutorial
- Bölüm 1 — Konu 1: Dart Nedir, Nerede Kullanılır, Neden Flutter Bu Dili Seçti
- Bölüm 1 — Konu 2: Ortam Kurulumu (Dart SDK, DartPad, Terminal ile Çalıştırma)
- Bölüm 1 — Konu 3: İlk Program (`main()`, `print()`, Dosya Yapısı)
- Bölüm 1 — Konu 4: Yorum Satırları, Temel Sözdizimi Kuralları
- Bölüm 2 — Konu 5: Değişken Tanımlama — `var`, `final`, `const` Farkı
- Bölüm 2 — Konu 6: Temel Tipler — `int`, `double`, `String`, `bool`
- Bölüm 2 — Konu 7: Tip Çıkarımı (Type Inference) ve Açık Tip Belirtme
- Bölüm 2 — Konu 8: `dynamic` ve `Object` — Ne Zaman Kullanılır, Ne Zaman Kaçınılır
- Bölüm 2 — Konu 9: Null Safety Temelleri (`?`, `!`, `late`'e Giriş)
- Bölüm 3 — Konu 10: Aritmetik, Atama, Karşılaştırma, Mantıksal Operatörler
- Bölüm 3 — Konu 11: `if / else if / else`
- Bölüm 3 — Konu 12: `switch` / `switch expression` (Modern Dart)
- Bölüm 3 — Konu 13: Ternary Operatör, `??`, `??=`, `?.`
- Bölüm 3 — Konu 14: `for`, `while`, `do-while` Döngüleri
- Bölüm 4 — Konu 16: `List` — Oluşturma, Erişim, Temel Metodlar
- Bölüm 4 — Konu 17: `Set` — Benzersiz Eleman Mantığı
- Bölüm 4 — Konu 18: `Map` — Key-Value Yapılar
- Bölüm 4 — Konu 19: Koleksiyon Üzerinde `for-in`, `forEach`
- Bölüm 4 — Konu 20: Spread Operatörü (`...`, `...?`) ve Collection If/For
- Bölüm 5 — Konu 21: Fonksiyon Tanımlama, Parametreler (Positional, Named, Optional)
- Bölüm 5 — Konu 22: Varsayılan Parametre Değerleri (Derinlemesine)
- Bölüm 5 — Konu 23: Arrow Function (`=>`) Sözdizimi
- Bölüm 5 — Konu 24: Fonksiyonlar Birinci Sınıf Vatandaş — Değişkene Atama, Parametre Olarak Geçme
- Bölüm 5 — Konu 25: Anonim Fonksiyonlar ve Closure Kavramı (Derinlemesine)
- Bölüm 5 — Konu 26: Recursion (Özyineleme)
- Bölüm 6 — Konu 27: Class Tanımlama, Constructor (Varsayılan, Named, Factory)
- Bölüm 6 — Konu 28: Alanlar (Fields), Metodlar, `this` Kullanımı (Derinlemesine)
- Bölüm 6 — Konu 29: Initializer List, Constructor Kısayolları (Derinlemesine)
- Bölüm 6 — Konu 30: Getter / Setter
- Bölüm 6 — Konu 31: Statik Üyeler (`static`)
- Bölüm 7 — Konu 32: Kalıtım (`extends`), `super` Kullanımı
- Bölüm 7 — Konu 33: Metod Override Etme, `@override`
- Bölüm 7 — Konu 34: Soyut Sınıflar (`abstract class`)
- Bölüm 7 — Konu 35: Interface Mantığı (`implements`)
- Bölüm 7 — Konu 36: Mixin (`with`)
- Bölüm 7 — Konu 37: `enum` — Basit ve Gelişmiş (Metotlu Enum'lar)
- Bölüm 8 — Konu 38: `try / catch / finally`, `throw`
- Bölüm 8 — Konu 39: Özel Exception Sınıfları Yazma
- Bölüm 8 — Konu 40: Sound Null Safety Derinlemesine — `late`, `required`, Non-Nullable Varsayılan Davranış
- Bölüm 8 — Konu 41: `assert` ile Geliştirme Zamanı Kontrolleri
- Bölüm 9 — Konu 42: Generic Sınıflar ve Fonksiyonlar
- Bölüm 9 — Konu 43: Generic Sınırlamalar (`<T extends ...>`)
- Bölüm 9 — Konu 44: Dart'ın Built-in Generic Koleksiyonları Nasıl Çalışır
- Bölüm 10 — Konu 45: `Future` Kavramı, `async`/`await`
- Bölüm 10 — Konu 46: `Future.then`, Hata Yönetimi (`catchError`)
- Bölüm 10 — Konu 47: `Stream` Temelleri, `async*`, `yield`
- Bölüm 10 — Konu 48: `StreamController`, Broadcast Stream
- Bölüm 11 — Konu 49: `map`, `where`, `reduce`, `fold`
- Bölüm 11 — Konu 50: `sort`, Custom Comparator ile Sıralama
- Bölüm 11 — Konu 51: Iterable Kavramı Derinlemesine (Lazy Evaluation)
- Bölüm 11 — Konu 52: Cascade Notasyonu (`..`)
- Bölüm 12 — Konu 53: `pubspec.yaml`, pub.dev'den Paket Ekleme
- Bölüm 12 — Konu 54: Kütüphane Oluşturma, `import`/`export`, `part`/`part of`
- Bölüm 12 — Konu 55: Dart'ta Test Yazımı (`test` Paketi, Unit Test Mantığı)
- Bölüm 12 — Konu 56: Extension Methods
- Bölüm 12 — Konu 57: Dart'ın Derleme Modelleri (JIT vs AOT) ve Bunun Flutter'a Etkisi
- Bölüm 13 — Konu 59: Dart 3 Pattern Matching — Records, Destructuring, Sealed Classes, Exhaustive Switch
- Bölüm 13 — Konu 60: `Never` Tipi, `covariant` ve Generic Variance Detayları
- Bölüm 13 — Konu 61: Event Loop Derinlemesine — Microtask Queue vs Event Queue
- Bölüm 13 — Konu 62: Memory Model & Performans — Garbage Collection, `const` Nesnelerin Bellek Avantajı
- Bölüm 13 — Konu 63: Isolate'ler Arası Mesajlaşmanın Maliyeti ve `compute()`'un İç İşleyişi
- Bölüm 13 — Konu 64: FFI (Foreign Function Interface) — C Koduna Erişim
- Bölüm 13 — Konu 65: Sunucu Tarafında Dart — `dart:io`, `shelf` Paketiyle Basit Bir Backend/CLI Aracı Yazma
- Bölüm 13 — Konu 66: Derleyici & Analiz Araçları — `dart analyze`, Custom Lint Kuralları, `build_runner` Mimarisi
İçindekiler 9 başlık
- Arrow Function Nedir?
- Ne Zaman Kullanılabilir, Ne Zaman Kullanılamaz?
- void Fonksiyonlarda Arrow Kullanımı
- Koşullu İfadelerle Arrow Function — Ternary ile Birleştirme
- Getter'larda Arrow Function — Küçük Bir Önizleme
- Neden Bu Kadar Yaygın Kullanılır?
- Klasik Yazım ile Arrow Yazımı — Ne Zaman Hangisi?
- 🎯 Bu Dersten Çıkarılması Gerekenler
- 📝 Ödevler
Arrow Function Nedir?
Bir fonksiyonun gövdesi tek bir ifadeden oluşuyorsa (tek bir değer hesaplayıp döndürüyorsa), Dart bunu çok daha kısa yazmana izin veren bir sözdizimi sunar: arrow function (=>).
// Klasik yazım
int kare(int sayi) {
return sayi * sayi;
}
// Arrow function ile
int kareKisa(int sayi) => sayi * sayi;
void main() {
print(kare(5)); // 25
print(kareKisa(5)); // 25 — aynı sonuç
}Sözdizimi: dönüşTipi fonksiyonAdı(parametreler) => ifade;
Dikkat et — return kelimesi ve süslü parantezler yoktur. => işaretinden sonraki ifadenin sonucu, otomatik olarak fonksiyonun dönüş değeri olur. Sonunda yine noktalı virgül (;) gerekir.
Ne Zaman Kullanılabilir, Ne Zaman Kullanılamaz?
Kullanılabilir — gövde tek bir ifadeyse:
bool cift(int sayi) => sayi % 2 == 0;
String selamla(String isim) => "Merhaba, $isim!";
double alan(double genislik, double yukseklik) => genislik * yukseklik;Kullanılamaz — gövde birden fazla ifade/işlem içeriyorsa:
// ❌ Bu arrow function ile YAZILAMAZ (birden fazla ifade var)
int hesapla(int a, int b) {
int toplam = a + b;
int carpim = a * b;
return toplam + carpim;
}Arrow function, sadece tek bir ifadenin sonucunu doğrudan döndürmek için tasarlanmıştır. Eğer ara değişkenler tanımlaman, koşullu mantık çalıştırman veya birden fazla adım gerekiyorsa, klasik { } yazımına dönmen gerekir.
void Fonksiyonlarda Arrow Kullanımı
Arrow function, sadece değer döndüren fonksiyonlarla sınırlı değildir — bir işlemi (yan etki) tek satırda yapan void fonksiyonlarda da kullanılabilir:
void selamVer(String isim) => print("Merhaba, $isim!");
void main() {
selamVer("Elif"); // Merhaba, Elif!
}Burada print() çağrısının sonucu (aslında void) otomatik olarak fonksiyonun kendisinin de void dönüş tipine uyar.
Koşullu İfadelerle Arrow Function — Ternary ile Birleştirme
Bölüm 3'te öğrendiğimiz ternary operatörünü hatırlarsan, arrow function ile birlikte tek satırda koşullu mantık da yazabilirsin:
String durumBelirle(int yas) => yas >= 18 ? "Yetişkin" : "Çocuk";
void main() {
print(durumBelirle(20)); // Yetişkin
print(durumBelirle(10)); // Çocuk
}Ya da Bölüm 3'te gördüğümüz switch expression ile:
String harfNotu(int puan) => switch (puan) {
>= 90 => "AA",
>= 80 => "BA",
>= 70 => "BB",
_ => "FF",
};Bu, önceki bölümlerde öğrendiğin özelliklerin (ternary, switch expression) arrow function ile nasıl birleştiğini gösteriyor — Dart'ın modern sözdizimi, bu parçaları bir araya getirdiğinde çok güçlü ve kısa ifadeler kurmana izin veriyor.
Getter'larda Arrow Function — Küçük Bir Önizleme
Bölüm 6'da sınıflar konusunda "getter" kavramını detaylı işleyeceğiz, ama arrow function'ın orada da sıkça kullanıldığını bilmen faydalı:
class Dikdortgen {
double genislik;
double yukseklik;
Dikdortgen(this.genislik, this.yukseklik);
double get alan => genislik * yukseklik; // arrow ile kısa getter
}Neden Bu Kadar Yaygın Kullanılır?
Arrow function, Dart/Flutter kodunda inanılmaz derecede yaygındır çünkü:
- Kısalık — tek satırlık basit mantıklar için gereksiz görsel gürültüyü (süslü parantez,
return) ortadan kaldırır. - Fonksiyonel programlama stiline uygunluk — Bölüm 11'de göreceğimiz
map,where,reducegibi metodlara anonim fonksiyon (isimsiz fonksiyon) geçerken sürekli kullanılır:
void main() {
List<int> sayilar = [1, 2, 3, 4, 5];
// where metoduna arrow function ile kısa bir fonksiyon geçiriyoruz
List<int> ciftler = sayilar.where((sayi) => sayi % 2 == 0).toList();
print(ciftler); // [2, 4]
}Bu örnek, Bölüm 11'de detaylı işleyeceğimiz .where() metoduna bir önizleme — ama arrow function'ın parametre olarak geçilen fonksiyonlarda ne kadar doğal ve sık kullanıldığını göstermesi açısından önemli.
- Flutter'da widget build metodlarında — basit widget'lar döndüren fonksiyonlarda sürekli göreceksin:
// Flutter'a ileride göreceğin bir örnek (şimdilik sadece sözdizimine bak)
Widget build(BuildContext context) => Text("Merhaba");Klasik Yazım ile Arrow Yazımı — Ne Zaman Hangisi?
Pratik kural: Fonksiyonun gövdesi tek bir return ifadesinden ibaretse, arrow function kullan — daha temiz olur. Birden fazla adım, ara değişken veya koşullu blok (if/else blokları, döngüler) içeriyorsa, klasik { } yazımını kullan.
// ✅ Arrow uygun — tek ifade
int ikiyleCarp(int x) => x * 2;
// ✅ Klasik uygun — birden fazla adım var
int karmasikHesap(int x) {
int adim1 = x * 2;
int adim2 = adim1 + 10;
if (adim2 > 100) {
return 100;
}
return adim2;
}🎯 Bu Dersten Çıkarılması Gerekenler
- Arrow function (
=>), tek ifadelik fonksiyonları kısaltmak için kullanılır;returnve{ }gerekmez. - Sadece tek bir ifade içeren fonksiyonlarda kullanılabilir — birden fazla adım gerekiyorsa klasik yazım şart.
voidfonksiyonlarda da kullanılabilir (bir yan etkiyi tek satırda çalıştırmak için).- Ternary ve
switchexpression ile birleştirilerek tek satırda koşullu mantık kurulabilir. - Fonksiyonel programlama stilinde (
map,wheregibi metodlara fonksiyon geçerken) ve Flutter'da çok sık kullanılır.
📝 Ödevler
- [ ] Üç farklı klasik fonksiyonu (örn. çift/tek kontrolü, iki sayının toplamı, bir string'i büyük harfe çevirme) arrow function'a dönüştür.
- [ ] Birden fazla adım gerektiren bir fonksiyonu (örn. bir sayının hem karesini hem küpünü hesaplayıp toplayan) arrow function ile yazmayı dene, neden çalışmadığını yorumla.
- [ ] Ternary operatörünü arrow function içinde kullanarak bir yaş kategorisi belirleyen fonksiyon yaz (çocuk/genç/yetişkin gibi 3 kategori).
- [ ]
voiddönüş tipli, arrow function ile yazılmış, bir mesajı biçimlendirip yazdıran bir fonksiyon yaz.
Sıradaki konu: Bölüm 5 — Konu 24: Fonksiyonlar Birinci Sınıf Vatandaş — Değişkene Atama, Parametre Olarak Geçme