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.
Görev
KolayTek bir alana sahip bir Circle struct'ı oluşturun: radius (f64).
Circle için &self kullanan iki metoda sahip bir implementasyon bloğu ekleyin:
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ı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
}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
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 Player