İlişkili Fonksiyonlar
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası. Ders 4 / 61.
Bir impl bloğundaki tüm function'ların mevcut bir örnek üzerinde çalışması gerekmez. Parametre olarak self almayan function'lara associated function'lar denir: Bunlar belirli bir örnekle değil, örneğin kendisiyle ilişkilidir.
associated functions için en yaygın kullanım constructor oluşturmaktır. Gelenek gereği 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.
Bir associated function çağırmak için nokta gösterimi yerine tür adıyla birlikte :: sözdizimini 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 desen, struct'ları varsayılan değerlerle veya doğrulama mantığıyla başlatmak için temiz bir yol sunar; oluşturma mantığını tür tanımıyla birlikte tutar. Bu söz dizimini muhtemelen String::from() ile zaten gördün: bu da bir associated function!
Görev
KolayBir Book struct'ı iki fields ile oluştur: title (String) ve pages (u32).
Book için şu özelliklere sahip bir impl block Add:
- Bir
title: Stringparametresi takes - Verilen title değerine sahip ve
pagesdeğeri0olarak ayarlanmış yeni birBookreturns
Ayrıca &self takes ve şu formatta bir String returns olan info adlı bir method Add: "{title} has {pages} pages"
Bir input alacaksın:
- Kitabın title değeri (String)
Verilen title ile bir kitap create etmek için Book::new associated function'ını kullan, ardından info method'unu calling sonucunu Print.
Beklenen Output formatı:
{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.
Object Oriented Programming 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