CodeBlanks Logo Icon CodeBlanks

Closure sözdizimi

|param| gövde sözdizimiyle closure tanımlarsın.

Closure sözdizimi

Closure, bir değişkene atanabilen ya da fonksiyona verilebilen adsız fonksiyondur. Parametreler dikey çizgiler arasına yazılır; tek ifadelik gövdede süslü parantez gerekmez:

let kare = |x: i32| x * x;
let topla = |a: i32, b: i32| a + b;
let selam = || println!("merhaba");
let uzun = |x: i32| {
    let y = x * 2;
    y + 1
};

Closure'lar normal fonksiyon gibi çağrılır: kare(4). Fonksiyonlardan farkı, tanımlandıkları ortamdaki değişkenleri yakalayabilmeleridir.

Fonksiyonlarla karşılaştırma

Aynı işi yapan fonksiyon ve closure:

fn kare_fn(x: i32) -> i32 { x * x }
let kare_cl = |x: i32| -> i32 { x * x };
let kare_kisa = |x| x * x;          // türler çıkarılır

Fonksiyon imzalarında tür zorunludur çünkü API'nin parçasıdır; closure'lar çoğunlukla kısa ömürlü ve yereldir, bu yüzden türler çıkarılabilir. Ortamı yakalamayan closure'lar fn işaretçisine de dönüşebilir.

Uygulama İlk closure'lar

kare (|x: i32| x * x) ve topla (|a: i32, b: i32| a + b) closure'larını tanımla. kare(4) ve topla(2, 3) sonuçlarını boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let kare = |x: i32| x * x;
    let topla = |a: i32, b: i32| a + b;
    println!("{} {}", kare(4), topla(2, 3));
}

Beklenen çıktı

16 5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parametresiz bir closure nasıl yazılır?

  • () => ifade
  • fn() ifade
  • |_| ifade
  • || ifade Doğru cevap

Açıklama: || boş parametre listesidir; |_| ise bir parametre alıp yok sayar.

2 Parametre listesi

Soru
let kare = ____ x * x;
Cevap
let kare = |x: i32| x * x;

Açıklama: Closure parametreleri dikey çizgiler arasına yazılır.

3 Closure ve sonucu

Kavram Anlamı
(|x: i32| x * x)(4) 16
(|a: i32, b: i32| a + b)(2, 3) 5
(|| 7)() 7
(|x: i32| x - 1)(0) -1

Orta seviye bölümündeki tüm dersler