Menu
Coddy logo textTech

İ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!

challenge icon

Görev

Kolay

Bir Book struct'ı iki fields ile oluştur: title (String) ve pages (u32).

Book için şu özelliklere sahip bir impl block Add:

  • Bir title: String parametresi takes
  • Verilen title değerine sahip ve pages değeri 0 olarak ayarlanmış yeni bir Book returns

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} pages

Kendin 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
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Rust derleyicisi