CodeBlanks Logo Icon CodeBlanks

Açık ömürler

<'a> ile açık ömür parametresi belirtmeyi öğrenirsin.

Açık ömürler

Bir fonksiyon iki referans alıp birini döndürüyorsa, derleyici dönen referansın hangisine bağlı olduğunu bilemez. Ömür parametresi bunu açıkça söyler:

fn en_uzun<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() >= y.len() { x } else { y }
}

Okunuşu: "dönen referans, x ve y'nin ikisinin de geçerli olduğu süre kadar yaşar". Ömür adları kısa ve küçük harfle yazılır: 'a, 'b.

Çağrı yerinde denetim

Derleyici 'a'yı iki argümanın ömürlerinden kısa olanı olarak seçer. Sonuç bu süreden uzun kullanılırsa hata verir:

let a = String::from("uzun metin");
let sonuc;
{
    let b = String::from("kısa");
    sonuc = en_uzun(&a, &b);
}
// println!("{sonuc}");   // hata: b yeterince uzun yaşamıyor

Bu örnekte sonuç aslında a olsa da derleyici çalışma anı değerlerine bakmaz; imzadaki sözleşmeye göre karar verir.

Uygulama En uzun metin

Yukarıdaki fn en_uzun<'a>(x: &'a str, y: &'a str) -> &'a str fonksiyonunu yaz. en_uzun("elma", "karpuz") sonucunu yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn en_uzun<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() >= y.len() {
        x
    } else {
        y
    }
}

fn main() {
    println!("{}", en_uzun("elma", "karpuz"));
}

Beklenen çıktı

karpuz

Soru ve cevaplar

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

1 Ömür parametresi bir değerin ne kadar yaşadığını değiştirir mi?

  • Çalışma anında belirler
  • Hayır; yalnızca referanslar arasındaki ilişkiyi tanımlar Doğru cevap
  • Evet, uzatır
  • Evet, kısaltır

Açıklama: Ömür açıklamaları bir sözleşmedir; derleyici çağrı yerlerinde bu sözleşmeye uyulup uyulmadığını denetler.

2 Ömür parametresi

Soru
fn en_uzun____(x: &'a str, y: &'a str) -> &'a str {
    if x.len() >= y.len() { x } else { y }
}
Cevap
fn en_uzun<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() >= y.len() { x } else { y }
}

Açıklama: Ömür parametreleri de açılı parantezde, kesme işaretiyle bildirilir.

3 Yazım ve anlamı

Kavram Anlamı
<'a> Ömür parametresi
&'a str 'a kadar yaşayan referans
-> &'a str Dönüş girdilere bağlı
E0106 Ömür belirtilmemiş

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