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 fonksiyonların mevcut bir örnek üzerinde işlem yapması gerekmez. Parametre olarak self almayan fonksiyonlara ilişkili fonksiyonlar denir; bunlar belirli bir örnekten ziyade türün kendisiyle ilişkilidir.

İlişkili fonksiyonların en yaygın kullanımı yapıcılar (constructors) 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,
        }
    }
}

Burada self parametresi olmadığına dikkat edin—bu fonksiyonun çalışması için mevcut bir Player nesnesine ihtiyacı yoktur. Bunun yerine, yepyeni bir tane oluşturur ve döndürür. Dönüş türü yapının (struct) kendisidir.

İlişkili bir fonksiyonu çağırmak için, nokta notasyonu 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 desen, oluşturma mantığını tür tanımıyla birlikte tutarak, struct'ları varsayılan değerlerle veya doğrulama mantığıyla başlatmak için temiz bir yol sağlar. Bu söz dizimini muhtemelen String::from() ile zaten görmüşsünüzdür—bu da bir ilişkili fonksiyondur!

challenge icon

Görev

Kolay

İki alanı olan bir Book struct'ı oluşturun: title (String) ve pages (u32).

Book için new adında bir ilişkili fonksiyon (associated function) içeren bir uygulama bloğu (implementation block) ekleyin:

  • 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 formatta bir String döndüren info adında 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 fonksiyonunu kullanın, ardından info metodunu çağırmanın sonucunu yazdırın.

Beklenen çıktı formatı:

{title} has {pages} pages

Kopya kağıdı

Bir impl bloğunda self parametresi almayan fonksiyonlara ilişkili fonksiyonlar (associated functions) denir. Bunlar, belirli bir örnekten ziyade türün kendisiyle ilişkilidirler.

İlişkili fonksiyonlar yaygın olarak yapıcılar (constructors) olarak kullanılır ve genellikle new olarak adlandırılırlar:

struct Player {
    name: String,
    score: u32,
}

impl Player {
    fn new(name: String) -> Player {
        Player {
            name,
            score: 0,
        }
    }
}

Bir ilişkili fonksiyonu çağırmak için tür adıyla birlikte :: söz dizimini kullanın:

let player1 = Player::new(String::from("Alice"));

String::from(), halihazırda kullandığınız bir ilişkili fonksiyon örneğidir.

Kendin dene

use std::io;

// TODO: Başlık (String) ve sayfa sayısı (u32) alanlarına sahip Book yapısını (struct) tanımlayın


// TODO: Book için aşağıdakileri içeren bir impl bloğu ekleyin:
// - Bir başlık alan ve sayfaları 0 olarak ayarlanmış bir Book döndüren `new` ilişkili fonksiyonu
// - "{title} has {pages} pages" formatında bir String döndüren `info` metodu


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 başlıkla bir kitap oluşturmak için Book::new kullanın
    // TODO: info metodunu çağırmanın sonucunu yazdırın
}
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