Açık ömürler
- Rust kursu
- Orta seviye
- Ders 14/115
- 4 dk
<'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ıyorBu ö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
fn main() {
// buraya yaz
}Örnek çözüm
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
fn en_uzun____(x: &'a str, y: &'a str) -> &'a str {
if x.len() >= y.len() { x } else { y }
}
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ş |