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ılamazAncak, &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çirinBu 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.
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
usizetürüne dönüştürün (parse) - İki parametre alan bir
truncate_messagefonksiyonu tanımlayın:- Mesaj için bir dize dilimi
&str - Maksimum uzunluk için bir
usize
- Mesaj için bir dize dilimi
- 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çirBir 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
}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
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma