CodeBlanks Logo Icon CodeBlanks

Özet - Metodlar

impl, &self ve &mut self'i birleştirerek bir Rectangle alan hesabı yazarsın.

Metotlar özeti

impl Tür { ... } bloğu davranışı türe bağlar. &self okur, &mut self değiştirir, self tüketir. self almayan fonksiyonlar ilişkili fonksiyondur ve Tür::ad() ile çağrılır; kurucu geleneği new'dür. Nokta çağrısında Rust gerekli &/&mut'u kendisi ekler. Bir tür için birden fazla impl bloğu yazılabilir.

Ne zaman metot?

İşlem türün kendisiyle ilgiliyse ve çoğunlukla tek bir örnek üzerinde çalışıyorsa metot yaz. Yeni örnek üretiyorsa ilişkili fonksiyon yaz (new, from_*, with_*). Getter'lar alanla aynı adı taşıyabilir. Metotlar, kodun okunuşunu "nesne.eylem()" biçimine getirerek otomatik tamamlamayı da kolaylaştırır.

Uygulama Nokta türü

Nokta { x: f64, y: f64 } için new, fn uzaklik(&self, o: &Nokta) -> f64 (Pisagor, sqrt) ve fn hareket(&mut self, dx: f64, dy: f64) yaz. a = (0, 0), b = (3, 4): önce uzaklığı al, sonra a.hareket(3.0, 0.0) yapıp yeniden al ve iki sonucu yazdır.

Başlangıç kodu

main.rs
struct Nokta {
    x: f64,
    y: f64,
}

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
struct Nokta {
    x: f64,
    y: f64,
}

impl Nokta {
    fn new(x: f64, y: f64) -> Self {
        Self { x, y }
    }
    fn uzaklik(&self, o: &Nokta) -> f64 {
        ((self.x - o.x).powi(2) + (self.y - o.y).powi(2)).sqrt()
    }
    fn hareket(&mut self, dx: f64, dy: f64) {
        self.x += dx;
        self.y += dy;
    }
}

fn main() {
    let mut a = Nokta::new(0.0, 0.0);
    let b = Nokta::new(3.0, 4.0);
    let d1 = a.uzaklik(&b);
    a.hareket(3.0, 0.0);
    let d2 = a.uzaklik(&b);
    println!("{} {}", d1, d2);
}

Beklenen çıktı

5 4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>fn uzaklik(&amp;self, o: &amp;Nokta) -&gt; f64</code> için doğru çağrı hangisi?

  • a.uzaklik(b)
  • Nokta::uzaklik(b)
  • uzaklik(a, b)
  • a.uzaklik(&b) Doğru cevap

Açıklama: self otomatik olarak a'dan ödünç alınır; ikinci parametre açıkça &b ile verilir.

2 Kurucu dönüşü

Soru
fn new(x: f64, y: f64) -> ____ {
    Self { x, y }
}
Cevap
fn new(x: f64, y: f64) -> Self {
    Self { x, y }
}

Açıklama: Kurucu türün yeni bir örneğini, yani Self döndürür.

3 Grubun özeti

Kavram Anlamı
impl Nokta { } Davranış bloğu
&self Okuma
&mut self Değiştirme
Nokta::new Kurucu

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma