Menu
Coddy logo textTech

Özet - Smart Pointer Mock

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 61.

challenge icon

Görev

Kolay

Rust'ı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: T tipinde tek bir value alanına sahip, genel (public) ve jenerik bir SmartBox<T> yapısı (struct) tanımlayın. Bir SmartBox oluşturan ve bir oluşturma mesajı yazdıran bir new ilişkili fonksiyonu (associated function) uygulayın. İçteki değere bir referans döndüren bir get metodu ekleyin. Son olarak, SmartBox kapsam dışına çıktığında bir temizleme mesajı yazdırmak için Drop ö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ı tutan SmartBox<i32> ve bir metin tutan SmartBox<String> oluşturun (her ikisi de sağlanan girdilerden alınacaktır). get metodunuzu 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 created

Değ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 dropped

Her 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