Menu
Coddy logo textTech

Fonksiyon Parametresi Olarak Dilimler

Coddy'nin Rust Journey'sinin Logic & Flow 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. Parametre olarak bir dize dilimi (&str) ve bir maksimum uzunluk (usize) alan truncate_message adında bir fonksiyon oluşturun. Eğer mesaj uzunluğu maksimumu aşarsa, fonksiyon 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ı) okuyun ve boşlukları temizleyin (trim)
  • İkinci girdiyi (maksimum uzunluk) okuyun ve boşlukları temizleyin (trim)
  • Maksimum uzunluğu usize türüne dönüştürün (parse)
  • İki parametre alan bir truncate_message fonksiyonu tanımlayın:
    • Mesaj için bir dize dilimi &str
    • Maksimum uzunluk için bir usize
  • Fonksiyonun içinde, mesaj uzunluğunun maksimum uzunluktan büyük olup olmadığını kontrol edin
  • Eğer büyükse, &message[0..max_len] kullanarak mesajın 0. indeksten maksimum uzunluğa kadar olan bir dilimini döndürün
  • Eğer değilse, mesajın tamamını döndürün
  • Fonksiyonu girdi mesajı ve maksimum uzunluk ile çağırın
  • Döndürülen sonucu yazdırın

Girdi:

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

Çıktı:

  • Maksimum uzunluğu aşıyorsa kısaltılmış mesaj, aksi takdirde mesajın tamamı

Kopya kağıdı

Parametre tipi olarak &str kullanmak, fonksiyonları String kullanmaktan daha esnek hale getirir; çünkü hem dize referanslarını hem de dize sabitlerini (string literals) kabul edebilirler:

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

let my_string = String::from("Hello");
print_message(&my_string); // String referansı geçir
print_message("World");     // Doğrudan bir dize sabiti geçir

Bir dizenin belirli bir uzunluğa kadar olan dilimini döndürmek için dilim (slice) sözdizimini kullanın:

&message[0..max_len]

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.

Logic & Flow bölümündeki tüm dersler