Lompati ke konten utama
Modul 4 · Pelajaran 2 dari 28/14 dalam kursus~12 min
Pelajaran modul (2/2)

Metode dan Blok impl

Di Rust, metode mirip dengan fungsi, tetapi metode tersebut didefinisikan dalam konteks suatu struct (atau enum atau sifat), dan parameter pertamanya selalu self, yang mewakili instance dari struct tempat metode tersebut dipanggil.

Mendefinisikan Metode dengan impl

Untuk mendefinisikan metode pada sebuah struct, kita menggunakan blok impl (implementasi) dengan nama struct:

Rust
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // This is an instance method. It takes &self for reading.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Call the method using dot notation
    println!("The area is: {}", rect.area());
}

Fungsi Terkait (Statis).

Fungsi yang didefinisikan dalam blok impl yang tidak menerima self sebagai parameter pertamanya disebut fungsi terkait (setara dengan metode statis dalam bahasa lain).

Mereka sering digunakan sebagai konstruktor untuk mengembalikan instance baru dari struct. Untuk memanggilnya, gunakan sintaksis titik dua ganda :::

Rust
impl Rectangle {
    // Associated function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Call the associated function
    let sq = Rectangle::square(10);
}

Metode yang Memodifikasi Status: &mut self

Jika suatu metode perlu mengubah bidang struct, metode tersebut harus mendeklarasikan parameter pertamanya sebagai &mut self. Instance tempat metode dipanggil harus dinyatakan dapat diubah (let mut):

Rust
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

Cobalah sendiri

Latihan#rust.m4.l2.e1
Upaya: 0Memuat…

Selesaikan blok impl dengan mendefinisikan metode luas yang mengambil &self dan mengembalikan u32 (perkalian lebar dan tinggi).

Memuat editor…
Tunjukkan petunjuk

Tulis `fn area(&self) -> u32 { self.width \* self.height }`di dalam blok`impl Rectangle`.

Solusi tersedia setelah 3 upaya

Latihan#rust.m4.l2.e2
Upaya: 0Memuat…

Tentukan fungsi terkait persegi di dalam impl Rectangle, yang menerima ukuran: u32 dan mengembalikan instance Rectangle dengan lebar dan tinggi sama dengan ukuran.

Memuat editor…
Tunjukkan petunjuk

Tulis `fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }`di dalam blok`impl`.

Solusi tersedia setelah 3 upaya

Latihan#rust.m4.l2.e3
Upaya: 0Memuat…

Tambahkan metode mutator skala ke Rectangle di dalam blok impl. Metode skala harus mengambil referensi yang bisa diubah ke self (&mut self) dan faktor: parameter u32, dan mengalikan lebar dan tinggi Rectangle dengan faktor.

Memuat editor…
Tunjukkan petunjuk

Terapkan `fn scale(&mut self, faktor: u32)`untuk memperbarui`self.width`dan`self.height`dengan mengalikannya dengan`factor`.

Solusi tersedia setelah 3 upaya