Sıcaklık dönüştürücü
- Rust kursu
- Başlangıç
- Ders 115/115
- 7 dk
Celsius ile Fahrenheit arasında dönüşüm yapan bir CLI yazarsın.
Bitirme görevi: sıcaklık dönüştürücü
Son görevde "100C" ya da "32F" gibi girdileri okuyup diğer birime çeviren bir araç yazacaksın. Gerçek programda girdiler std::env::args()'tan gelir; burada bir dizi kullanacağız. Adımlar: son karakteri birim olarak ayır, kalanı f64'e çevir, birime göre formülü uygula:
C → F: c * 9.0 / 5.0 + 32.0
F → C: (f - 32.0) * 5.0 / 9.0Geçersiz girdide program çökmemeli; fonksiyon Option<String> döndürsün.
? ile Option
Option döndüren bir fonksiyonda ?, None'ı hemen yukarı taşır. parse() bir Result verdiği için önce ok() ile Option'a çevrilir:
fn donustur(g: &str) -> Option<String> {
let (sayi, birim) = g.split_at(g.len() - 1);
let n: f64 = sayi.parse().ok()?;
match birim {
"C" => Some(format!("{g} = {:.1}F", n * 9.0 / 5.0 + 32.0)),
"F" => Some(format!("{g} = {:.1}C", (n - 32.0) * 5.0 / 9.0)),
_ => None,
}
}Not: boş girdide g.len() - 1 taşar; gerçek bir araçta önce boşluğu denetle.
Uygulama Dönüştürücü
Yukarıdaki fn donustur(g: &str) -> Option<String> fonksiyonunu yaz. ["100C", "32F", "abc"] girdilerini dolaşıp sonucu yazdır; None için GİRDİ: geçersiz yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn donustur(g: &str) -> Option<String> {
let (sayi, birim) = g.split_at(g.len() - 1);
let n: f64 = sayi.parse().ok()?;
match birim {
"C" => Some(format!("{g} = {:.1}F", n * 9.0 / 5.0 + 32.0)),
"F" => Some(format!("{g} = {:.1}C", (n - 32.0) * 5.0 / 9.0)),
_ => None,
}
}
fn main() {
for g in ["100C", "32F", "abc"] {
match donustur(g) {
Some(s) => println!("{}", s),
None => println!("{}: geçersiz", g),
}
}
}Beklenen çıktı
100C = 212.0F 32F = 0.0C abc: geçersiz
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>"100C".split_at(3)</code> ne döndürür?
- ("100", "C") Doğru cevap
- ("100C", "")
- ("10", "0C")
- Some(("100", "C"))
Açıklama: split_at verilen bayt konumundan iki dilime böler ve doğrudan tuple döndürür.
2 Result'tan Option'a
let n: f64 = sayi.parse().____?;
let n: f64 = sayi.parse().ok()?;
Açıklama: ok() Result'ı Option'a çevirir; ? de None'ı yukarı taşır.
3 Girdi ve sonuç
| Kavram | Anlamı |
|---|---|
100C |
212.0F |
32F |
0.0C |
0C |
32.0F |
abc |
geçersiz |