Menu
Coddy logo textTech

Değiştirilebilir Metotlar

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 3 / 61.

Bazen yöntemlerin verileri yalnızca okumanın ötesinde işlemler yapması gerekir. Verileri değiştirmeleri gerekir. Bir struct'ın alanlarını değiştirebilen yöntemler oluşturmak için &self yerine &mut self kullanırız.

mut anahtar sözcüğü, yönteme örneğin dahili durumunu değiştirme izni veren değiştirilebilir bir ödünç almayı belirtir:

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
    }
}

increment ve decrement işlevlerinin value değerini değiştirdikleri için &mut self kullandığına, get işlevinin ise yalnızca verileri okuduğu için &self kullandığına dikkat edin.

Değiştirilebilir yöntemleri çağırırken örneğin kendisi değiştirilebilir olarak bildirilmelidir:

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

Örneği oluştururken mut anahtar sözcüğünü unutursanız Rust, üzerinde herhangi bir &mut self yöntemini çağırmanızı engeller. Bu, verilerinizin ne zaman değişebileceğinin her zaman farkında olmanızı sağlar.

challenge icon

Görev

Kolay

Tek bir alana sahip bir BankAccount yapısı oluşturun: balance (i32).

BankAccount için üç yöntem içeren bir uygulama bloğu ekleyin:

  • deposit: &mut self ve bir amount: i32 alır, miktarı bakiyeye ekler
  • withdraw: &mut self ve bir amount: i32 alır, miktarı bakiyeden çıkarır
  • get_balance: &self alır ve mevcut bakiyeyi i32 olarak döndürür

Üç girdi alacaksınız:

  • İlk satır: başlangıç bakiyesi (i32)
  • İkinci satır: yatırma miktarı (i32)
  • Üçüncü satır: çekme miktarı (i32)

Başlangıç bakiyesiyle değiştirilebilir bir BankAccount örneği oluşturun, ardından verilen miktarı yatırın, verilen miktarı çekin ve son bakiyeyi yazdırın.

Beklenen çıktı biçimi:

{final_balance}

Kendin dene

use std::io;

// TODO: BankAccount struct'ını burada tanımla


// TODO: BankAccount için deposit, withdraw ve get_balance metodlarıyla implementation bloğunu ekle


fn main() {
    let mut input = String::new();
    
    // Başlangıç bakiyesini oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_balance: i32 = input.trim().parse().expect("Invalid number");
    
    input.clear();
    
    // Yatırma tutarını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let deposit_amount: i32 = input.trim().parse().expect("Invalid number");
    
    input.clear();
    
    // Çekme tutarını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let withdraw_amount: i32 = input.trim().parse().expect("Invalid number");
    
    // TODO: initial_balance ile mutable bir BankAccount örneği oluştur
    // TODO: deposit_amount ile deposit'i çağır
    // TODO: withdraw_amount ile withdraw'u çağır
    // TODO: get_balance kullanarak son bakiyeyi yazdır
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi