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:
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 :::
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):
impl Rectangle {
fn double_size(&mut self) {
self.width *= 2;
self.height *= 2;
}
}Cobalah sendiri
Selesaikan blok impl dengan mendefinisikan metode luas yang mengambil &self dan mengembalikan u32 (perkalian lebar dan tinggi).
Tunjukkan petunjuk
Tulis `fn area(&self) -> u32 { self.width \* self.height }`di dalam blok`impl Rectangle`.
Solusi tersedia setelah 3 upaya
Tentukan fungsi terkait persegi di dalam impl Rectangle, yang menerima ukuran: u32 dan mengembalikan instance Rectangle dengan lebar dan tinggi sama dengan ukuran.
Tunjukkan petunjuk
Tulis `fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }`di dalam blok`impl`.
Solusi tersedia setelah 3 upaya
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.
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