CodeBlanks Logo Icon CodeBlanks

Ömür nedir?

Ömür (lifetime) kavramının ne işe yaradığını öğrenirsin.

Ömür nedir?

Her referansın bir ömrü (lifetime) vardır: geçerli olduğu kod bölgesi. Derleyici, bir referansın gösterdiği değerden daha uzun yaşamadığını ömürleri karşılaştırarak denetler. Çoğu zaman ömürler otomatik çıkarılır ve hiç yazılmaz:

let r;                 // ---------+-- r'nin ömrü
{                      //          |
    let x = 5;         // -+-- x   |
    r = &x;            //  |       |
}                      // -+ x biter
// println!("{r}");    // hata E0597: x yeterince uzun yaşamıyor

Ömürler çalışma anında hiçbir şey yapmaz; yalnızca derleme anı denetimidir.

'static ömür

'static, en uzun ömürdür. Dize sabitleri ve static değişkenler bu ömre sahiptir; bu yüzden bir fonksiyondan güvenle döndürülebilirler:

fn karsilama() -> &'static str {
    "merhaba"
}

static SURUM: &str = "1.0";

Derleyici hata mesajlarında 'static önerse bile, çoğu zaman doğru çözüm referans yerine sahip olunan bir değer (String) döndürmektir.

Uygulama Statik metin

fn karsilama() -> &'static str yaz ve "merhaba" döndürsün. Sonucu ve uzunluğunu boşlukla yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn karsilama() -> &'static str {
    "merhaba"
}

fn main() {
    let s = karsilama();
    println!("{} {}", s, s.len());
}

Beklenen çıktı

merhaba 7

Soru ve cevaplar

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

1 <code>&amp;'static str</code> ne anlama gelir?

  • Yığında duran metin
  • Global değişken
  • Programın sonuna kadar geçerli bir metin referansı Doğru cevap
  • Değiştirilemeyen bir String

Açıklama: Dize sabitleri programın ikili dosyasına gömülür ve her zaman geçerlidir; bu yüzden türleri &'static str'dir.

2 Statik ömür

Soru
fn karsilama() -> &____ str {
    "merhaba"
}
Cevap
fn karsilama() -> &'static str {
    "merhaba"
}

Açıklama: Dize sabitleri programın sonuna kadar yaşar: &'static str.

3 Değer ve ömrü

Kavram Anlamı
"merhaba" 'static
fn f() -> &'static str Sabit döndürebilir
let x = 5; &x x'in kapsamı
String::from("a") Sahip olunan, ömür yok

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