Menu
Coddy logo textTech

Self Parametresi

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 2 / 61.

Bir metodun bir yapı örneğinde depolanan verilere erişmesi gerektiğinde &self parametresini kullanır. Bu özel parametre, bir metotta her zaman ilk bağımsız değişkendir ve metodun çağrıldığı örneğe bir başvuruyu temsil eder.

& sembolü, örneğin sahipliğini almak yerine onu ödünç aldığımız anlamına gelir. Bu, yöntemin örneği tüketmeden yapının alanlarını okumasını sağlar:

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

Yöntem gövdesinin içinde self, nokta gösterimini kullanarak yapının tüm alanlarına erişmenizi sağlar. area yöntemi, sonucu hesaplayıp döndürmek için hem width hem de height değerlerini okur.

&self yalnızca örneği ödünç aldığı için aynı yapı üzerinde birden fazla yöntemi sorunsuzca çağırabilirsiniz:

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // false
}

&self kullanan yöntemler salt okunurdur. Yapının verilerini inceleyebilirler ancak onları değiştiremezler. Bir sonraki derste, örneği değiştirebilen yöntemlerin nasıl oluşturulacağını öğreneceksin.

challenge icon

Görev

Kolay

Tek bir alana sahip bir Circle yapısı oluştur: radius (f64).

&self kullanan iki yönteme sahip bir Circle uygulama bloğu ekle:

  • circumference: çevreyi f64 olarak döndürür (formül: 2.0 * 3.14159 * radius)
  • diameter: çapı f64 olarak döndürür (formül: 2.0 * radius)

Bir girdi alacaksın:

  • Dairenin yarıçapı (f64)

Sağlanan yarıçapla bir Circle örneği oluştur, ardından çevreyi ve çapı ayrı satırlara yazdır.

Beklenen çıktı biçimi:

{circumference}
{diameter}

Kendin dene

use std::io;

// TODO: Circle struct'ını burada tanımla


// TODO: Circle için circumference ve diameter metodlarını içeren implementation bloğunu ekle


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: Bir Circle örneği oluştur ve circumference ile diameter'ı 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