Menu
CoddyTech

Rangkuman, Mock Smart Pointer

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 58 dari 61.

challenge icon

Tantangan

Mudah

Mari kita buat mock smart pointer bernama SmartBox yang menunjukkan cara kerja smart pointer Rust sebenarnya! Wrapper-mu akan bersifat generik, menyediakan akses ke nilai di dalamnya, dan secara otomatis mengumumkan saat dibersihkan.

Kamu akan menyusun kodemu dalam dua file:

  • smart_box.rs: Definisikan struct generik publik SmartBox<T> dengan satu field value bertipe T. Implementasikan fungsi terkait new yang membuat SmartBox dan mencetak pesan pembuatan. Tambahkan method get yang mengembalikan referensi ke nilai di dalamnya. Terakhir, implementasikan trait Drop untuk mencetak pesan pembersihan saat SmartBox keluar dari cakupan.
  • main.rs: Muat module smart_box dan tunjukkan penggunaan SmartBox dengan dua tipe yang berbeda. Buat SmartBox<i32> yang menyimpan angka dan SmartBox<String> yang menyimpan teks, keduanya dari input yang diberikan. Cetak nilainya menggunakan method get. Pesan Drop akan muncul secara otomatis saat box keluar dari cakupan di akhir main.

Saat SmartBox dibuat, cetak:

SmartBox created

Saat mengakses nilai, cetak dengan format ini:

Value: {value}

Saat SmartBox di-drop, cetak:

SmartBox dropped

Contohnya, dengan input 42 dan Hello:

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

Perhatikan bahwa kedua box dibuat terlebih dahulu, lalu nilainya diakses, dan akhirnya keduanya di-drop dalam urutan terbalik, yaitu yang terakhir dibuat akan di-drop pertama, saat main berakhir.

Kamu akan menerima dua input: nilai bilangan bulat (parse sebagai i32) dan nilai string.

Coba sendiri

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Baca input
    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: Buat SmartBox<i32> yang menyimpan angka tersebut
    
    // TODO: Buat SmartBox<String> yang menyimpan teks tersebut
    
    // TODO: Cetak nilai-nilainya menggunakan method get
    // Format: "Value: {value}"
    
    // Pesan Drop akan muncul secara otomatis saat main berakhir
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online