CodeBlanks Logo Icon CodeBlanks

Dönüş ve sahiplik

Fonksiyondan değer döndürmenin sahiplik üzerindeki etkisini öğrenirsin.

Dönüş ve sahiplik

Fonksiyon bir değer döndürünce sahiplik çağırana taşınır. Bu, fonksiyon içinde oluşturulan değerlerin güvenle dışarı verilmesini sağlar:

fn yeni_liste() -> Vec<i32> {
    let v = vec![1, 2, 3];
    v                  // sahiplik çağırana geçer, drop edilmez
}

fn ekle_unlem(mut s: String) -> String {
    s.push('!');
    s                  // aynı String geri verilir, kopya yok
}

Sahipliği verip geri almak

Bir değeri fonksiyona verip sonra geri almak için onu döndürmek mümkündür ama zahmetlidir:

fn uzunluk_ver(s: String) -> (String, usize) {
    let n = s.len();
    (s, n)
}
let (s, n) = uzunluk_ver(String::from("Rust"));

Bu yüzden Rust'ta bu iş için referanslar kullanılır: fonksiyon değeri ödünç alır ve sahiplik hiç el değiştirmez. Bir sonraki grup bu konudadır.

Uygulama Dönüştür ve geri ver

fn ekle_unlem(mut s: String) -> String yaz; sona '!' ekleyip s'yi döndürsün. let s = ekle_unlem(String::from("Merhaba")); ile çağırıp yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn ekle_unlem(mut s: String) -> String {
    s.push('!');
    s
}

fn main() {
    let s = ekle_unlem(String::from("Merhaba"));
    println!("{}", s);
}

Beklenen çıktı

Merhaba!

Soru ve cevaplar

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

1 Bir fonksiyon yerel <code>String</code>'ine referans (<code>&amp;String</code>) döndürebilir mi?

  • Evet, her zaman
  • Yalnızca mut ile
  • Yalnızca clone ile
  • Hayır; değer fonksiyon sonunda drop edilir, referans boşa düşerdi Doğru cevap

Açıklama: Derleyici sarkan referansı (dangling reference) reddeder; çözüm String'in kendisini döndürüp sahipliği aktarmaktır.

2 Sahipliği geri ver

Soru
fn buyut(mut s: String) -> String {
    s.make_ascii_uppercase();
    ____
}
Cevap
fn buyut(mut s: String) -> String {
    s.make_ascii_uppercase();
    s
}

Açıklama: Son ifade olarak s yazmak String'in sahipliğini çağırana taşır.

3 Kod ve sonuç

Kavram Anlamı
-> String (yerel değer) Sahiplik çağırana geçer
-> &String (yerel değer) Derleme hatası
(s, n) döndürmek Sahipliği geri vermek
&s parametresi Ödünç alma

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma