Özet - Metodlar
- Rust kursu
- Başlangıç
- Ders 76/115
- 5 dk
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
struct Nokta {
x: f64,
y: f64,
}
fn main() {
// buraya yaz
}Örnek çözüm
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(&self, o: &Nokta) -> 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üşü
fn new(x: f64, y: f64) -> ____ {
Self { x, y }
}
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 |