Menu
CoddyTech

method Generik

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

Struct generik dapat menyimpan tipe apa pun, tetapi tidak terlalu berguna tanpa method untuk berinteraksi dengan datanya. Untuk mendefinisikan method bagi struct generik, kamu memerlukan sintaks khusus di blok impl.

Kuncinya adalah mendeklarasikan parameter generik pada impl itu sendiri:

struct Wrapper<T> {
    value: T,
}

impl<T> Wrapper<T> {
    fn get(&self) -> &T {
        &self.value
    }
}

Perhatikan impl<T> sebelum Wrapper<T>. Ini memberi tahu Rust bahwa T adalah parameter tipe generik untuk seluruh blok implementasi. Tanpa deklarasi ini, Rust akan mencari tipe konkret bernama T dan gagal menemukannya.

method get mengembalikan &T: referensi ke tipe apa pun yang disimpan wrapper. Ini berfungsi baik saat T berupa integer, string, maupun tipe lainnya:

let num_wrapper = Wrapper { value: 100 };
let text_wrapper = Wrapper { value: "Rust" };

println!("{}", num_wrapper.get());  // 100
println!("{}", text_wrapper.get()); // Rust

Definisi method yang sama berfungsi untuk keduanya, karena T generik menyesuaikan diri dengan setiap tipe konkret saat kompilasi.

challenge icon

Tantangan

Mudah

Mari kita kembangkan container generikmu dengan method! Kamu akan membuat struct Box (jangan keliru dengan Box standar Rust) yang dapat menyimpan tipe apa pun dan menyediakan method untuk berinteraksi dengan isinya.

Kamu akan mengatur kodemu dalam dua file:

  • mybox.rs: Definisikan struct generik publik bernama MyBox<T> dengan field privat contents bertipe T. Implementasikan method untuk struct ini:
    • Fungsi terkait new yang membuat MyBox baru dengan nilai yang diberikan
    • Method peek yang mengembalikan referensi ke isinya (menggunakan &self)
    • Method replace yang menerima nilai baru dan mengganti isi saat ini (menggunakan &mut self)
  • main.rs: Sertakan module-mu dan tunjukkan method generik yang bekerja dengan tipe berbeda. Kamu akan membuat box, melihat isinya, dan mengganti nilai untuk menunjukkan cara kerja method tersebut.

Ingat sintaks utama untuk mengimplementasikan method pada struct generik: kamu perlu menulis impl<T> sebelum MyBox<T> untuk memberi tahu Rust bahwa T adalah parameter generik untuk seluruh blok implementasi.

Di file utamamu, tunjukkan cara menggunakan MyBox dengan:

  1. Membuat box dengan bilangan bulat (input pertama, diuraikan sebagai i32)
  2. Melihat isinya dan mencetak nilainya
  3. Mengganti isinya dengan bilangan bulat baru (input kedua, diuraikan sebagai i32)
  4. Melihat isinya lagi untuk menampilkan nilai yang sudah diperbarui
  5. Membuat box kedua dengan string (input ketiga)
  6. Melihat isi box string

Output-mu harus mengikuti format ini:

Integer box contains: {value}
After replace: {value}
String box contains: {value}

Contohnya, dengan input 10, 25, dan Rust:

Integer box contains: 10
After replace: 25
String box contains: Rust

Kamu akan menerima tiga input: bilangan bulat awal, bilangan bulat pengganti, dan nilai string.

Coba sendiri

mod mybox;

use mybox::MyBox;

fn main() {
    // Baca input
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let initial_int: i32 = input1.trim().parse().expect("Invalid integer");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let replacement_int: i32 = input2.trim().parse().expect("Invalid integer");

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let string_value = input3.trim().to_string();

    // TODO: Buat MyBox dengan bilangan bulat awal
    
    // TODO: Lihat isinya dan cetak: "Integer box contains: {value}"
    
    // TODO: Ganti isinya dengan bilangan bulat pengganti
    
    // TODO: Lihat lagi isinya dan cetak: "After replace: {value}"
    
    // TODO: Buat MyBox kedua dengan nilai string
    
    // TODO: Lihat isi MyBox yang berisi string dan cetak: "String box contains: {value}"
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online