İlişkili Fonksiyonlar
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 4 / 61.
Bir impl bloğundaki tüm işlevlerin mevcut bir örnek üzerinde çalışması gerekmez. Parametre olarak self almayan işlevlere ilişkili işlevler denir: bunlar belirli bir örnekle değil, türün kendisiyle ilişkilidir.
İlişkili işlevlerin en yaygın kullanım alanı kurucular oluşturmaktır. Geleneksel olarak bunlar genellikle new olarak adlandırılır:
struct Player {
name: String,
score: u32,
}
impl Player {
fn new(name: String) -> Player {
Player {
name,
score: 0,
}
}
}
self parametresinin bulunmadığına dikkat edin. Bu function’ın çalışması için mevcut bir Player gerekmez. Bunun yerine yepyeni bir tane oluşturur ve döndürür. Dönüş türü, bizzat struct’un kendisidir.
İlişkili bir işlevi çağırmak için nokta gösterimi yerine tür adıyla birlikte :: söz dizimini kullanın:
fn main() {
let player1 = Player::new(String::from("Alice"));
println!("{} starts with {} points", player1.name, player1.score);
// Çıktı: Alice 0 puanla başlar
}
Bu kalıp, yapı türlerini varsayılan değerlerle veya doğrulama mantığıyla başlatmak için temiz bir yol sunar ve oluşturma mantığını tür tanımıyla birlikte tutar. Bu söz dizimini muhtemelen String::from() ile daha önce gördün: bu da bir ilişkili işlevdir!
Görev
Kolayİki alanı olan bir Book yapısı oluşturun: title (String) ve pages (u32).
Book için, new adlı ilişkili bir işlev içeren bir uygulama bloğu ekleyin. Bu işlev:
- Bir
title: Stringparametresi alır - Verilen başlığa sahip ve
pagesdeğeri0olarak ayarlanmış yeni birBookdöndürür
Ayrıca &self alan ve şu biçimde bir String döndüren info adlı bir metot ekleyin: "{title} has {pages} pages"
Bir girdi alacaksınız:
- Kitabın başlığı (String)
Sağlanan başlıkla bir kitap oluşturmak için Book::new ilişkili işlevini kullanın, ardından info metodunu çağırmanın sonucunu yazdırın.
Beklenen çıktı biçimi:
{title} has {pages} pagesKendin dene
use std::io;
// TODO: Book struct'ını title (String) ve pages (u32) alanlarıyla tanımla
// TODO: Book için bir impl bloğu ekle:
// - title alan ve pages'i 0 olarak ayarlanmış bir Book döndüren `new` adında bir associated function
// - "{title} has {pages} pages" formatında bir String döndüren `info` adında bir method
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let title = input.trim().to_string();
// TODO: Sağlanan title ile bir book oluşturmak için Book::new kullan
// TODO: info metodunu çağırma sonucunu yazdır
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi