Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Buat struct Circle dengan satu field: radius (f64).

Tambahkan blok implementasi untuk Circle dengan dua method yang menggunakan &self:

  • circumference: mengembalikan keliling sebagai f64 (rumus: 2.0 * 3.14159 * radius)
  • diameter: mengembalikan diameter sebagai f64 (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
    
}
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