Menu
Coddy logo textTech

Self Parametresi

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 2 / 61.

Bir metot, bir struct örneğinde saklanan verilere erişmek istediğinde &self parametresini kullanır. Bu özel parametre, bir metottaki her zaman ilk argümandır ve metodun üzerinde çağrıldığı örneğe bir referansı temsil eder.

& sembolü, örneğin sahipliğini almak yerine onu ödünç aldığımız anlamına gelir. Bu, metodun örneği tüketmeden struct'ın alanlarını okumasına olanak tanır:

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

Metot gövdesinin içinde, self nokta notasyonunu kullanarak struct'ın tüm alanlarına erişmenizi sağlar. area metodu, sonucu hesaplamak ve döndürmek için hem width hem de height değerlerini okur.

&self yalnızca örneği ödünç aldığı için, aynı struct üzerinde herhangi bir sorun yaşamadan birden fazla metot çağırabilirsiniz:

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

&self kullanan metotlar salt okunurdur; struct'ın verilerini inceleyebilirler ancak değiştiremezler. Bir sonraki derste, örneği (instance) değiştirebilen metotların nasıl oluşturulacağını öğreneceksiniz.

challenge icon

Görev

Kolay

Tek bir alana sahip bir Circle struct'ı oluşturun: radius (f64).

Circle için &self kullanan iki metoda sahip bir implementasyon bloğu ekleyin:

  • 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ız:

  • Dairenin yarıçapı (f64)

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

Beklenen çıktı formatı:

{circumference}
{diameter}

Kopya kağıdı

Metotlar, ilk argüman olması gereken &self parametresini kullanarak struct verilerine erişir. & sembolü, metodun sahipliği almak yerine örneği ödünç aldığı anlamına gelir:

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

Metodun içinde, struct alanlarına erişmek için nokta notasyonuyla self kullanın. &self içeren metotlar salt okunurdur ve verileri inceleyebilir ancak değiştiremez.

&self örneği yalnızca ödünç aldığı için, aynı struct üzerinde birden fazla metot çağırabilirsiniz:

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

Kendin dene

use std::io;

// TODO: Circle yapısını burada tanımlayın


// TODO: Circle için çevre (circumference) ve çap (diameter) metotlarını içeren uygulama bloğunu ekleyin


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şturun ve çevresini ve çapını 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