Ana içeriğe geç
Modül 4 · Ders 2 ders 2Kurstaki 8/14~12 min
Modül dersleri (2/2)

Yöntemler ve uygulama Blokları

Rust'ta yöntemler işlevlere benzer, ancak bir yapı (veya bir numaralandırma veya özellik) bağlamında tanımlanırlar ve ilk parametreleri her zaman yöntemin çağrıldığı yapının örneğini temsil eden self olur.

impl ile Yöntem Tanımlama

Bir yapıdaki yöntemleri tanımlamak için yapının adını taşıyan bir impl (uygulama) bloğu kullanırız:

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

impl Rectangle {
    // This is an instance method. It takes &self for reading.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Call the method using dot notation
    println!("The area is: {}", rect.area());
}

İlişkili (Statik) İşlevler

Bir impl bloğu içinde tanımlanan ve ilk parametreleri olarak self'yi kabul etmeyen işlevlere ilişkili işlevler adı verilir (diğer dillerdeki statik yöntemlere eşdeğerdir).

Genellikle yapının yeni örneklerini döndürmek için yapıcı olarak kullanılırlar. Bunları çağırmak için çift kolon :: sözdizimini kullanın:

Rust
impl Rectangle {
    // Associated function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Call the associated function
    let sq = Rectangle::square(10);
}

Durumu Değiştiren Yöntemler: &mut self

Bir yöntemin yapının alanlarını değiştirmesi gerekiyorsa, ilk parametresini &mut self olarak bildirmesi gerekir. Yöntemin çağrıldığı örneğin kendisi değişken olarak bildirilmelidir (let mut):

Rust
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

Kendin dene

Egzersiz#rust.m4.l2.e1
Denemeler: 0Yükleniyor…

&self alan ve u32'yi (genişlik ve yüksekliğin çarpımı) döndüren alan yöntemini tanımlayarak impl bloğunu tamamlayın.

Düzenleyici yükleniyor…
İpucu göster

'impl Rectangle' bloğunun içine `fn space(&self) -> u32 { self.width \* self.height }` yazın.

3 denemeden sonra çözüm mevcut

Egzersiz#rust.m4.l2.e2
Denemeler: 0Yükleniyor…

impl Rectangle içinde size: u32 değerini alan ve genişlik ve yüksekliği size eşit olan bir Rectangle örneği döndüren kareyle ilişkili işlevi tanımlayın.

Düzenleyici yükleniyor…
İpucu göster

'impl' bloğunun içine `fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }' yazın.

3 denemeden sonra çözüm mevcut

Egzersiz#rust.m4.l2.e3
Denemeler: 0Yükleniyor…

Ölçek mutator yöntemini impl bloğunun içindeki Rectangle'a ekleyin. Ölçek yöntemi self (&mut self) ve faktör: u32 parametresine değişken bir referans almalı ve Dikdörtgenin hem genişliğini hem de yüksekliğini faktörle çarpmalıdır.

Düzenleyici yükleniyor…
İpucu göster

'self.width' ve 'self.height'ı 'faktör' ile çarparak güncellemek için 'fn ölçeği(&mut self, faktör: u32)'yi uygulayın.

3 denemeden sonra çözüm mevcut