Menu
Coddy logo textTech

Fonksiyon Parametresi Olarak Dilimler

Coddy'nin Rust Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 56 / 66.

Dizelerle çalışan fonksiyonlar yazarken, parametre türü olarak String yerine &str kullanmak, fonksiyonlarınızı çok daha esnek ve kullanışlı hale getirir.

String parametresi alan bir fonksiyon yalnızca sahipli (owned) dizgileri kabul edebilir, bu da onu nasıl çağırabileceğinizi kısıtlar:

fn print_message(text: String) {
    println!("{}", text);
}

// Bu çalışır, ancak sahipliği alır
let my_string = String::from("Hello");
print_message(my_string); // my_string bu noktadan sonra artık kullanılamaz

Ancak, &str alan bir fonksiyon hem String referanslarını hem de dize sabitlerini kabul edebilir, bu da onu çok daha çok yönlü hale getirir:

fn print_message(text: &str) {
    println!("{}", text);
}

// Artık her iki türle de çağırabilirsiniz
let my_string = String::from("Hello");
print_message(&my_string); // String referansı geçirin
print_message("World");     // Doğrudan bir dize sabiti geçirin

Bu esneklik, fonksiyonlarınızın, çağıranları verilerini dönüştürmeye veya sahipliği bırakmaya zorlamadan daha fazla durumda çalışması anlamına gelir.

challenge icon

Görev

Kolay

İki girdi alacaksınız. İlk girdi bir metin mesajı, ikinci girdi ise mesaj için izin verilen maksimum uzunluktur. Bir dize dilimini (truncate_message) ve maksimum uzunluğu (&str) parametre olarak alan usize adlı bir işlev oluşturun. Mesajın uzunluğu maksimum uzunluğu aşarsa işlev, mesajın maksimum uzunluğa kadar olan bir dilimini döndürmelidir. Aksi takdirde mesajın tamamını döndürmelidir. Sonucu yazdırın.

Gereksinimler:

  • İlk girdiyi (metin mesajını) okuyun ve boşlukları kırpın
  • İkinci girdiyi (maksimum uzunluğu) okuyun ve boşlukları kırpın
  • Maksimum uzunluğu usize türüne ayrıştırın
  • İki parametre alan bir truncate_message işlevi tanımlayın:
    • Mesaj için bir dize dilimi &str
    • Maksimum uzunluk için bir usize
  • İşlevin içinde, mesaj uzunluğunun maksimum uzunluktan büyük olup olmadığını kontrol edin
  • Evetse, &message[0..max_len] kullanarak mesajın 0. indisten maksimum uzunluğa kadar olan bir dilimini döndürün
  • Hayırsa, mesajın tamamını döndürün
  • İşlevi girdi mesajı ve maksimum uzunluk ile çağırın
  • Döndürülen sonucu yazdırın

Girdi:

  • İlk satır: Bir metin mesajı (ör. Hello World from Rust)
  • İkinci satır: Sayı olarak maksimum uzunluk (ör. 11)

Çıktı:

  • Maksimum uzunluğu aşıyorsa kesilmiş mesaj, aksi takdirde mesajın tamamı

Kendin dene

use std::io;

// TODO: truncate_message fonksiyonunu burada tanımlayın


fn main() {
    // Metin mesajını oku
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Maksimum uzunluğu oku
    let mut max_length_input = String::new();
    io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
    let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
    
    // TODO: truncate_message fonksiyonunu çağırın ve sonucu saklayın
    
    // TODO: Sonucu yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi