Parameter Self
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 2 dari 61.
Ketika sebuah method perlu mengakses data yang tersimpan dalam instance struct, method tersebut menggunakan parameter &self. Parameter khusus ini selalu menjadi argumen pertama dalam sebuah method dan mewakili referensi ke instance tempat method tersebut dipanggil.
Simbol & berarti kita meminjam instance, bukan mengambil alih kepemilikannya. Dengan begitu, method dapat membaca field pada struct tanpa mengonsumsi instance tersebut:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn is_square(&self) -> bool {
self.width == self.height
}
}
Di dalam badan method, self memberimu akses ke semua field struct menggunakan notasi titik. Method area membaca width dan height untuk menghitung dan mengembalikan hasilnya.
Karena &self hanya meminjam instance, kamu dapat memanggil beberapa method pada struct yang sama tanpa masalah:
fn main() {
let rect = Rectangle { width: 10, height: 5 };
println!("Area: {}", rect.area()); // 50
println!("Square? {}", rect.is_square()); // false
}
Method yang menggunakan &self bersifat hanya-baca. Method tersebut dapat memeriksa data struct, tetapi tidak dapat mengubahnya. Di pelajaran berikutnya, kamu akan belajar cara membuat method yang dapat mengubah instance.
Tantangan
MudahBuat struct Circle dengan satu field: radius (f64).
Tambahkan blok implementasi untuk Circle dengan dua method yang menggunakan &self:
circumference: mengembalikan keliling sebagaif64(rumus:2.0 * 3.14159 * radius)diameter: mengembalikan diameter sebagaif64(rumus:2.0 * radius)
Kamu akan menerima satu input:
- Jari-jari lingkaran (
f64)
Buat instance Circle dengan jari-jari yang diberikan, lalu cetak keliling dan diameter pada baris terpisah.
Format output yang diharapkan:
{circumference}
{diameter}Coba sendiri
use std::io;
// TODO: Definisikan struct Circle di sini
// TODO: Tambahkan blok implementasi untuk Circle dengan method circumference dan diameter
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let radius: f64 = input.trim().parse().expect("Invalid number");
// TODO: Buat instance Circle dan cetak keliling serta diameternya
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online