Dart’ta bir fonksiyon şu şekilde tanımlanır:
tip fonksiyonAdı(parametreler) {
// Çalıştırılacak kod
return birDeğer;
}
1. Basit Bir Fonksiyon
Parametre almayan ve değer döndürmeyen bir fonksiyon.
Örnek:
void selamVer() {
print("Merhaba, Dart!");
}
void main() {
selamVer(); // Fonksiyon çağrısı
}
Çıktı:
Merhaba, Dart!
2. Parametre Alan Fonksiyon
Bir fonksiyona parametre göndererek daha esnek hale getirebilirsiniz.
Örnek:
void toplamaYap(int a, int b) {
print("Toplam: ${a + b}");
}
void main() {
toplamaYap(5, 10); // Fonksiyon çağrısı
}
Toplam: 15
3. Değer Döndüren Fonksiyon
Bir fonksiyon işlem sonucunu çağrıldığı yere döndürebilir.
Örnek:
int carpmaYap(int a, int b) {
return a * b;
}
void main() {
int sonuc = carpmaYap(4, 5); // Fonksiyon çağrısı
print("Çarpma sonucu: $sonuc");
}
Çıktı:
Çarpma sonucu: 20
4. İsteğe Bağlı (Opsiyonel) Parametreler
Dart’ta köşeli parantez [ ]
içinde tanımlanan parametreler isteğe bağlıdır. Eğer gönderilmezse, varsayılan olarak null
olur.
Örnek:
void selamVer(String isim, [String? mesaj]) {
print("Merhaba $isim!");
if (mesaj != null) {
print("Mesaj: $mesaj");
}
}
void main() {
selamVer("Emin"); // İkinci parametreyi göndermedik
selamVer("Emin", "Dart öğreniyorum!"); // İki parametre gönderdik
}
Çıktı:
Merhaba Emin!
Merhaba Emin!
Mesaj: Dart öğreniyorum!
5. Varsayılan Değerli Parametreler
İsteğe bağlı parametrelere varsayılan bir değer atanabilir.
Örnek:
void selamVer(String isim, [String mesaj = "Nasılsın?"]) {
print("Merhaba $isim! $mesaj");
}
void main() {
selamVer("Emin"); // Varsayılan mesaj kullanılır
selamVer("Emin", "Harika bir gün!"); // Kendi mesajımızı gönderdik
}
Çıktı:
Merhaba Emin! Nasılsın?
Merhaba Emin! Harika bir gün!
6. Adlandırılmış Parametreler
Adlandırılmış parametreler süslü parantez { }
içinde tanımlanır ve çağrılırken parametre ismiyle belirtilir.
Örnek:
void selamVer({required String isim, String mesaj = "Nasılsın?"}) {
print("Merhaba $isim! $mesaj");
}
void main() {
selamVer(isim: "Emin"); // Sadece isim belirtiliyor
selamVer(isim: "Emin", mesaj: "Hoş geldin!"); // İsim ve mesaj belirtiliyor
}
Çıktı:
Merhaba Emin! Nasılsın?
Merhaba Emin! Hoş geldin!
!Not: required
anahtar kelimesi, bir adlandırılmış parametrenin zorunlu olmasını sağlar.
7. Lambda (Anonim Fonksiyonlar)
Dart’ta kısa fonksiyonlar, bir ifade olarak tanımlanabilir. Bu tür fonksiyonlara lambda veya arrow function denir.
Örnek:
int topla(int a, int b) => a + b;
void main() {
print("Toplam: ${topla(3, 7)}");
}
Çıktı:
Toplam: 10
8. Fonksiyonları Değişkene Atama
Dart’ta fonksiyonlar bir değişkene atanabilir.
Örnek:
void main() {
var selamla = (String isim) {
print("Merhaba $isim!");
};
selamla("Emin"); // Fonksiyon çağrısı
}
Çıktı:
Merhaba Emin!
9. Yüksek Dereceli Fonksiyonlar
Bir fonksiyon, başka bir fonksiyonu parametre olarak alabilir veya bir fonksiyon döndürebilir.
Örnek: Fonksiyonu Parametre Olarak Kullanma
void islemYap(int a, int b, Function islem) {
print("Sonuç: ${islem(a, b)}");
}
void main() {
islemYap(5, 3, (x, y) => x + y); // Toplama
islemYap(5, 3, (x, y) => x * y); // Çarpma
}
Çıktı:
Sonuç: 8
Sonuç: 15
10. Fonksiyonların Döndürülmesi
Dart, bir fonksiyonun başka bir fonksiyonu döndürmesine izin verir. Bu, “yüksek dereceli fonksiyonlar” (higher-order functions) olarak adlandırılır.
Örnek: Bir Fonksiyon Döndüren Fonksiyon
Function toplamaFonksiyonu() {
return (int a, int b) => a + b; // Lambda ile döndürüyoruz
}
void main() {
var topla = toplamaFonksiyonu();
print("Sonuç: ${topla(5, 3)}");
}
Çıktı:
Sonuç: 8
11. İç İçe Fonksiyonlar (Nested Functions)
Dart’ta bir fonksiyonun içinde başka bir fonksiyon tanımlanabilir. Bu iç fonksiyonlar yalnızca dış fonksiyon içinde çağrılabilir.
Örnek:
void disFonksiyon() {
print("Dış fonksiyon çalıştı.");
void icFonksiyon() {
print("İç fonksiyon çalıştı.");
}
icFonksiyon(); // İç fonksiyon burada çağrılabilir
}
void main() {
disFonksiyon();
}
Çıktı:
Dış fonksiyon çalıştı.
İç fonksiyon çalıştı.
12. Rekürsif Fonksiyonlar (Recursive Functions)
Bir fonksiyonun kendisini çağırmasına rekürsiyon (recursion) denir. Bu, genellikle döngülerin yerini alabilir.
Örnek: Faktöriyel Hesaplama
int faktoriyel(int n) {
if (n <= 1) {
return 1;
} else {
return n * faktoriyel(n - 1);
}
}
void main() {
print("5! = ${faktoriyel(5)}");
}
Çıktı:
5! = 120
13. Nullable Fonksiyonlar
Bir fonksiyon, null
atanabilir bir değişkene tanımlanabilir. Bu, Function?
ile sağlanır.
Örnek:
void main() {
Function? selamla;
selamla = (String isim) {
print("Merhaba $isim!");
};
if (selamla != null) {
selamla("Oğuz");
}
}
Çıktı:
Merhaba Oğuz!
14. Varsayılan Parametreler ve Adlandırılmış Parametrelerle Birlikte Kullanımı
Adlandırılmış parametreler, varsayılan değerlerle birlikte kullanılabilir. Bu, esneklik sağlar.
Örnek:
void siparisVer({required String urun, int miktar = 1}) {
print("Sipariş verildi: $urun, Miktar: $miktar");
}
void main() {
siparisVer(urun: "Laptop");
siparisVer(urun: "Telefon", miktar: 3);
}
Çıktı:
Sipariş verildi: Laptop, Miktar: 1
Sipariş verildi: Telefon, Miktar: 3
15. Fonksiyonları Koleksiyonlarda Kullanma
Fonksiyonlar, bir koleksiyonun elemanları üzerinde işlem yapmak için kullanılabilir.
Örnek: map
Kullanımı
void main() {
List<int> sayilar = [1, 2, 3, 4, 5];
var kareler = sayilar.map((sayi) => sayi * sayi).toList();
print("Kareler: $kareler");
}
Çıktı:
Kareler: [1, 4, 9, 16, 25]
16. Fonksiyonları Parametre Olarak Kullanma
Bir fonksiyon başka bir fonksiyona parametre olarak gönderilebilir.
Örnek:
void islemYap(int a, int b, Function islem) {
print("Sonuç: ${islem(a, b)}");
}
int toplama(int x, int y) => x + y;
int carpma(int x, int y) => x * y;
void main() {
islemYap(4, 5, toplama); // Toplama fonksiyonunu gönderiyoruz
islemYap(4, 5, carpma); // Çarpma fonksiyonunu gönderiyoruz
}
Çıktı:
Sonuç: 9
Sonuç: 20
17. Asenkron Fonksiyonlar
Dart, asenkron işlemler için Future
ve async-await
yapılarını kullanır.
Örnek: Basit Asenkron Fonksiyon
Future<String> veriGetir() async {
await Future.delayed(Duration(seconds: 2)); // 2 saniye bekle
return "Veri getirildi!";
}
void main() async {
print("Veri bekleniyor...");
String veri = await veriGetir();
print(veri);
}
Çıktı:
Veri bekleniyor...
Veri getirildi!
18. Arrow Function ve Birden Fazla Satır
Birden fazla satır içeren arrow function kullanılamaz, ancak kod bloğu {}
ile tanımlanarak normal bir fonksiyona dönüştürülebilir.
Örnek:
int toplam(int a, int b) {
int sonuc = a + b;
print("Hesaplanan toplam: $sonuc");
return sonuc;
}
void main() {
print(toplam(4, 5));
}