Menu
CoddyTech

Method Mutable

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

Terkadang method perlu melakukan lebih dari sekadar membaca data. Method perlu mengubahnya. Untuk membuat method yang dapat mengubah field pada struct, kita menggunakan &mut self alih-alih &self.

Kata kunci mut menunjukkan peminjaman yang dapat diubah, sehingga method diizinkan untuk mengubah status internal instance:

struct Counter {
    value: i32,
}

impl Counter {
    fn increment(&mut self) {
        self.value += 1;
    }
    
    fn decrement(&mut self) {
        self.value -= 1;
    }
    
    fn get(&self) -> i32 {
        self.value
    }
}

Perhatikan bahwa increment dan decrement menggunakan &mut self karena keduanya mengubah value, sedangkan get menggunakan &self karena hanya membaca data.

Saat memanggil method yang dapat mengubah nilai, instance itu sendiri harus dideklarasikan sebagai mutable:

fn main() {
    let mut counter = Counter { value: 0 };
    
    counter.increment();
    counter.increment();
    println!("{}", counter.get()); // 2
    
    counter.decrement();
    println!("{}", counter.get()); // 1
}

Jika kamu lupa kata kunci mut saat membuat instance, Rust akan mencegahmu memanggil method &mut self apa pun pada instance tersebut. Ini memastikan kamu selalu tahu saat datamu mungkin berubah.

challenge icon

Tantangan

Mudah

Buat struct BankAccount dengan satu field: balance (i32).

Tambahkan blok implementasi untuk BankAccount dengan tiga method:

  • deposit: menerima &mut self dan amount: i32, lalu menambahkan jumlah tersebut ke saldo
  • withdraw: menerima &mut self dan amount: i32, lalu mengurangi saldo dengan jumlah tersebut
  • get_balance: menerima &self dan mengembalikan saldo saat ini sebagai i32

Kamu akan menerima tiga input:

  • Baris pertama: saldo awal (i32)
  • Baris kedua: jumlah deposit (i32)
  • Baris ketiga: jumlah penarikan (i32)

Buat instance BankAccount yang bisa diubah dengan saldo awal, lalu lakukan deposit sejumlah yang diberikan, tarik sejumlah yang diberikan, dan cetak saldo akhir.

Format output yang diharapkan:

{final_balance}

Coba sendiri

use std::io;

// TODO: Definisikan struct BankAccount di sini


// TODO: Tambahkan blok implementasi untuk BankAccount dengan method deposit, withdraw, dan get_balance


fn main() {
    let mut input = String::new();
    
    // Baca saldo awal
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_balance: i32 = input.trim().parse().expect("Invalid number");
    
    input.clear();
    
    // Baca jumlah setoran
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let deposit_amount: i32 = input.trim().parse().expect("Invalid number");
    
    input.clear();
    
    // Baca jumlah penarikan
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let withdraw_amount: i32 = input.trim().parse().expect("Invalid number");
    
    // TODO: Buat instance BankAccount yang dapat diubah dengan initial_balance
    // TODO: Panggil deposit dengan deposit_amount
    // TODO: Panggil withdraw dengan withdraw_amount
    // TODO: Tampilkan saldo akhir menggunakan get_balance
}
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