Menu
Coddy logo textTech

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

challenge icon

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: String parametresi alır
  • Verilen başlığa sahip ve pages değeri 0 olarak ayarlanmış yeni bir Book dö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} 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.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi