Özet - Smart Pointer Mock
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 61.
Görev
KolayRust'ın gerçek akıllı işaretçilerinin (smart pointers) arka planda nasıl çalıştığını gösteren SmartBox adında bir akıllı işaretçi taslağı oluşturalım! Sarmalayıcınız (wrapper) jenerik olacak, içindeki değere erişim sağlayacak ve temizlendiğinde bunu otomatik olarak bildirecektir.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
smart_box.rs:Ttipinde tek birvaluealanına sahip, genel (public) ve jenerik birSmartBox<T>yapısı (struct) tanımlayın. Bir SmartBox oluşturan ve bir oluşturma mesajı yazdıran birnewilişkili fonksiyonu (associated function) uygulayın. İçteki değere bir referans döndüren birgetmetodu ekleyin. Son olarak, SmartBox kapsam dışına çıktığında bir temizleme mesajı yazdırmak içinDropözelliğini (trait) uygulayın.main.rs: smart_box modülünüzü dahil edin ve SmartBox'ınızı iki farklı tiple gösterin. Bir sayı tutanSmartBox<i32>ve bir metin tutanSmartBox<String>oluşturun (her ikisi de sağlanan girdilerden alınacaktır).getmetodunuzu kullanarak değerleri yazdırın. Drop mesajları, main fonksiyonunun sonunda kutular kapsam dışına çıktığında otomatik olarak görünecektir.
Bir SmartBox oluşturulduğunda şunu yazdırmalıdır:
SmartBox createdDeğere erişirken, şu formatta yazdırın:
Value: {value}Bir SmartBox bırakıldığında (dropped), şunu yazdırmalıdır:
SmartBox droppedÖrneğin, 42 ve Hello girdileriyle:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox droppedHer iki kutunun da önce oluşturulduğuna, ardından değerlerine erişildiğine ve son olarak main bittiğinde her ikisinin de ters sırada (son oluşturulan, ilk bırakılan) bırakıldığına dikkat edin.
İki girdi alacaksınız: bir tam sayı değeri (i32 olarak ayrıştırın) ve bir dize (string) değeri.
Kendin dene
mod smart_box;
use smart_box::SmartBox;
fn main() {
// Girdileri oku
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let number: i32 = input1.trim().parse().expect("Failed to parse number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let text = input2.trim().to_string();
// TODO: Sayıyı tutan bir SmartBox<i32> oluşturun
// TODO: Metni tutan bir SmartBox<String> oluşturun
// TODO: get metodunu kullanarak değerleri yazdırın
// Format: "Value: {value}"
// Drop mesajları main sona erdiğinde otomatik olarak görünecektir
}
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