Uygulama Bloklarına Giriş
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 1 / 61.
Rust'ta struct'lar bir türün hangi verileri tuttuğunu tanımlar, ancak bu türün ne yapabileceğini tanımlamazlar. Bir struct'a davranış kazandırmak için impl anahtar kelimesi ile uygulama bloklarını kullanırız.
Bir implementation bloğu, fonksiyonları (metot olarak adlandırılır) belirli bir struct'a bağlar. İşte temel yapı:
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
impl Dog bloğu, Rust'a içerideki her şeyin Dog struct'ına ait olduğunu söyler. Bu ayrım, veri tanımınızı temiz tutarken uygulama bloğuna ihtiyaç duyduğunuz kadar metot eklemenize olanak tanır.
Bir metodu çağırmak için bir örnek üzerinde nokta notasyonunu kullanın:
fn main() {
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // Çıktı: Rex hav diyor!
}
Veriyi (struct) davranıştan (impl bloğu) ayırmaya yönelik bu desen, Rust kodunu organize etmenin temelidir. Gelecek derslerde, metotların yukarıdaki örnekte gördüğünüz &self parametresi aracılığıyla struct verilerine nasıl eriştiğini inceleyeceğiz.
Görev
Kolayİki alanı olan bir Cat struct'ı oluşturun: name (String) ve lives (u8).
Cat için &self alan ve kedinin adının ardından " says meow!" yazdıran meow isimli bir metodun bulunduğu bir implementation bloğu ekleyin.
İki girdi alacaksınız:
- İlk satır: kedinin adı (String)
- İkinci satır: can sayısı (u8)
Sağlanan değerlerle bir Cat örneği oluşturun ve üzerinde meow metodunu çağırın.
Beklenen çıktı formatı:
{name} says meow!Kopya kağıdı
Uygulama blokları, impl anahtar kelimesini kullanarak metotları struct'lara bağlar:
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
impl bloğu, veri tanımını (struct) davranıştan (metotlar) ayırır. Metotlar nokta notasyonu kullanılarak çağrılır:
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // Çıktı: Rex says woof!
Metotlar, struct verilerine erişmek için &self parametresini kullanır.
Kendin dene
use std::io;
// TODO: 'name' (String) ve 'lives' (u8) alanlarına sahip Cat yapısını (struct) tanımlayın
// TODO: Cat için 'meow' metoduna sahip bir uygulama (implementation) bloğu ekleyin
fn main() {
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut lives_input = String::new();
io::stdin().read_line(&mut lives_input).expect("Failed to read line");
let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
// TODO: Bir Cat örneği oluşturun ve meow metodunu çağı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