CodeBlanks Logo Icon CodeBlanks

Dilim ve fonksiyonlar

Fonksiyonlara dilim geçirmeyi ve veriyi ödünç almayı öğrenirsin.

Dilim ve fonksiyonlar

Fonksiyonlarda &String yerine &str, &Vec<T> yerine &[T] almak hem String hem sabit hem alt dilim kabul etmeyi sağlar. Dönen dilim, girdinin bir parçasıdır:

fn ilk_kelime(s: &str) -> &str {
    for (i, b) in s.bytes().enumerate() {
        if b == b' ' {
            return &s[..i];
        }
    }
    &s[..]
}

Dönen &str, s'yi ödünç aldığı sürece kaynak değiştirilemez.

Hazır yardımcılar

Standart kütüphane, elle döngü yazmadan dilim üreten yöntemler sunar:

let s = "ad soyad yaş";
let ilk = s.split(' ').next().unwrap_or("");   // "ad"
let (sol, sag) = s.split_at(2);               // ("ad", " soyad yaş")
let temiz = "  rust  ".trim();                // "rust"

split_whitespace, lines ve trim hepsi kaynağın parçalarını &str olarak döndürür; kopya yapmaz.

Uygulama İlk kelime

fn ilk_kelime(s: &str) -> &str yaz: bytes().enumerate() ile ilk boşluğu bul ve &s[..i] döndür; boşluk yoksa &s[..]. "merhaba dünya" ve "tek" için sonuçları boşlukla ayırarak yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn ilk_kelime(s: &str) -> &str {
    for (i, b) in s.bytes().enumerate() {
        if b == b' ' {
            return &s[..i];
        }
    }
    &s[..]
}

fn main() {
    println!("{} {}", ilk_kelime("merhaba dünya"), ilk_kelime("tek"));
}

Beklenen çıktı

merhaba tek

Soru ve cevaplar

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

1 <code>ilk_kelime</code> bir <code>String</code> ile nasıl çağrılır?

  • ilk_kelime(metin)
  • ilk_kelime(*metin)
  • Çağrılamaz
  • ilk_kelime(&metin) Doğru cevap

Açıklama: &String otomatik olarak &str'ye dönüşür (deref coercion).

2 Dilim parametresi

Soru
fn en_buyuk(v: ____) -> i32 {
    *v.iter().max().unwrap()
}
Cevap
fn en_buyuk(v: &[i32]) -> i32 {
    *v.iter().max().unwrap()
}

Açıklama: &[i32] hem vektör hem dizi referansı kabul eder.

3 Yöntem ve " ad soyad " sonucu

Kavram Anlamı
trim() "ad soyad"
split_whitespace().count() 2
len() 11
trim().split_at(2).0 "ad"

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