Parametreli Closure'lar
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 61 / 66.
Parametre almayan closure'lar yararlı olsa da, çoğu zaman closure'larınızı daha esnek ve güçlü hale getirmek için onlara veri aktarmak isteyeceksiniz. Closure'lara parametre eklemek, daha önce öğrendiğiniz aynı kalıbı takip eder, ancak değerler dikey çubukların içinde yer alır.
Tek bir parametre kabul eden bir closure'ı şu şekilde tanımlayabilirsiniz:
let add_one = |x: i32| x + 1;Parametre x'in, tıpkı fonksiyon parametreleri gibi dikey çubukların arasına geldiğine dikkat edin. Ardından, bir değer geçirerek bu closure'ı çağırabilirsiniz:
let add_one = |x: i32| x + 1;
let result = add_one(5); // sonuç 6Birden fazla parametreye sahip closure'lar için, bunları virgülle ayırın:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // sonuç 12'dirGörev
Kolayİki girdi alacaksınız. İlk girdi bir sayı, ikinci girdi de bir sayıdır. İki parametre alan ve kuvvet hesaplayan (birinci parametrenin ikinci parametre kuvveti) bir closure oluşturun. Closure'ı bir değişkende saklayın, girdi değerleriyle çağırın ve sonucu yazdırın.
Gereksinimler:
- İlk girdiyi (taban sayı) okuyun ve boşlukları temizleyin
- Bunu
i32türüne dönüştürün - İkinci girdiyi (üs) okuyun ve boşlukları temizleyin
- Bunu
u32türüne dönüştürün .pow()metodunu kullanarak kuvveti hesaplayan iki parametreli bir closure oluşturun- Closure'ı bir değişkende saklayın
- Closure'ı her iki girdi değeriyle çağırın
- Sonucu yazdırın
Girdi:
- İlk satır: Bir taban sayı (örneğin,
2) - İkinci satır: Bir üs (örneğin,
3)
Çıktı:
- Kuvvet hesaplamasının sonucu
Kopya kağıdı
Closure'lar, parametreleri dikey çubukların || arasına yerleştirerek kabul edebilirler:
let add_one = |x: i32| x + 1;
let result = add_one(5); // sonuç 6'dırBirden fazla parametre için bunları virgülle ayırın:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // sonuç 12'dirKendin dene
use std::io;
fn main() {
// İlk girişi oku (taban sayı)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// İkinci girişi oku (üs)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Kuvvet hesaplayan bir closure oluşturun ve bunu bir değişkende saklayın
// TODO: Closure'ı taban ve üs ile çağırın
// Sonucu yazdır
println!("{}", result);
}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