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.
Tantangan
MudahBuat struct BankAccount dengan satu field: balance (i32).
Tambahkan blok implementasi untuk BankAccount dengan tiga method:
deposit: menerima&mut selfdanamount: i32, lalu menambahkan jumlah tersebut ke saldowithdraw: menerima&mut selfdanamount: i32, lalu mengurangi saldo dengan jumlah tersebutget_balance: menerima&selfdan mengembalikan saldo saat ini sebagaii32
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
}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