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.
Görev
KolayTek bir alana sahip bir Circle yapısı oluştur: radius (f64).
&self kullanan iki yönteme sahip bir Circle uygulama bloğu ekle:
circumference: çevreyif64olarak döndürür (formül:2.0 * 3.14159 * radius)diameter: çapıf64olarak 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
}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
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi