Banka hesabı
- Rust kursu
- Başlangıç
- Ders 114/115
- 7 dk
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
struct Hesap {
sahip: String,
bakiye: i64,
}
fn main() {
// buraya yaz
}Örnek çözüm
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
self.bakiye -= tutar;
____
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 |