CodeBlanks Logo Icon CodeBlanks

Banka hesabı

Account struct ve metotlarıyla basit bir bankacılık modeli kurarsın.

Bitirme görevi: banka hesabı

Bir banka hesabını struct ve metotlarla modelle. Para yatırmak her zaman başarılıdır; para çekmek ise bakiye yetersizse başarısız olmalı ve bunu Result ile bildirmeli:

struct Hesap {
    sahip: String,
    bakiye: i64,
}

impl Hesap {
    fn new(sahip: &str) -> Self { /* bakiye 0 */ }
    fn yatir(&mut self, tutar: i64) { /* ... */ }
    fn cek(&mut self, tutar: i64) -> Result<(), String> { /* ... */ }
}

Result<(), String>: başarıda döndürülecek değer yok (()), hatada açıklama var.

Erken dönüşle denetim

Önce hatalı durumu ele alıp erken dönmek, ana mantığı sade tutar:

fn cek(&mut self, tutar: i64) -> Result<(), String> {
    if tutar > self.bakiye {
        return Err(format!("yetersiz bakiye: {}", self.bakiye));
    }
    self.bakiye -= tutar;
    Ok(())
}

{:?} ile yazdırınca başarı Ok(()), hata Err("...") olarak görünür.

Uygulama Hesap işlemleri

Yukarıdaki Hesap struct'ını ve new, yatir, cek metotlarını yaz. "Ece" için hesap aç, 100 yatır; cek(30) ve cek(500) sonuçlarını {:?} ile ayrı satırlara, en sonda Ece: 70 yazdır.

Başlangıç kodu

main.rs
struct Hesap {
    sahip: String,
    bakiye: i64,
}

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
struct Hesap {
    sahip: String,
    bakiye: i64,
}

impl Hesap {
    fn new(sahip: &str) -> Self {
        Self {
            sahip: sahip.to_string(),
            bakiye: 0,
        }
    }
    fn yatir(&mut self, tutar: i64) {
        self.bakiye += tutar;
    }
    fn cek(&mut self, tutar: i64) -> Result<(), String> {
        if tutar > self.bakiye {
            return Err(format!("yetersiz bakiye: {}", self.bakiye));
        }
        self.bakiye -= tutar;
        Ok(())
    }
}

fn main() {
    let mut h = Hesap::new("Ece");
    h.yatir(100);
    println!("{:?}", h.cek(30));
    println!("{:?}", h.cek(500));
    println!("{}: {}", h.sahip, h.bakiye);
}

Beklenen çıktı

Ok(())
Err("yetersiz bakiye: 70")
Ece: 70

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bakiye yetersizken <code>cek</code> ne yapmalı?

  • Sessizce hiçbir şey yapmamak
  • Bakiyeye dokunmadan Err döndürmek Doğru cevap
  • Bakiyeyi eksiye düşürmek
  • panic! vermek

Açıklama: Başarısız işlem durumu değiştirmemeli ve çağırana nedenini bildirmeli.

2 Başarı değeri

Soru
self.bakiye -= tutar;
____
Cevap
self.bakiye -= tutar;
Ok(())

Açıklama: Değer döndürmeyen başarı Ok(()) ile bildirilir.

3 Metot ve self biçimi

Kavram Anlamı
Hesap::new self yok
yatir &mut self
cek &mut self + Result
bakiye_goster &self

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma