Komut iskeleti
- Rust kursu
- Orta seviye
- Ders 60/115
- 6 dk
args ile temel komut okuma yapısını kurarsın.
Not defteri CLI: iskelet
Bu projede komut satırından çalışan bir not defteri yazacağız: not ekle süt al, not liste, not sil 2, not ara süt. Argümanlar std::env::args() ile gelir; ilk eleman program yoludur:
let args: Vec<String> = std::env::args().collect();
// $ not liste → ["not", "liste"]
let komut = args.get(1).map(|s| s.as_str()).unwrap_or("yardim");Komut yoksa programın çökmemesi için get(1) kullanıp varsayılan olarak yardim seçiyoruz. Alıştırmalarda argümanları elle kurulmuş bir vektörle vereceğiz.
Argümanları dilim olarak işlemek
Komut işleyiciyi &[String] alan bir fonksiyona koymak onu test edilebilir yapar: main gerçek argümanları, testler sahte argümanları verir:
fn komut_adi(args: &[String]) -> &str {
args.get(1).map(|s| s.as_str()).unwrap_or("yardim")
}
fn main() {
let args: Vec<String> = std::env::args().collect();
println!("{}", komut_adi(&args));
}Uygulama Komut adı
Yukarıdaki komut_adi fonksiyonunu yaz. ["not", "liste"] ve yalnızca ["not"] içeren iki Vec<String> için sonuçları boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn komut_adi(args: &[String]) -> &str {
args.get(1).map(|s| s.as_str()).unwrap_or("yardim")
}
fn main() {
let a = vec![String::from("not"), String::from("liste")];
let b = vec![String::from("not")];
println!("{} {}", komut_adi(&a), komut_adi(&b));
}Beklenen çıktı
liste yardim
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>args[1]</code> yerine <code>args.get(1)</code> kullanmanın nedeni nedir?
- Daha hızlıdır
- args[1] derlenmez
- String döndürür
- Komut verilmezse panic yerine None alınır Doğru cevap
Açıklama: Kullanıcı girdisi her zaman eksik olabilir; programın dostça bir yardım mesajı vermesi gerekir.
2 Argümanları topla
let args: Vec<String> = std::env::____().collect();
let args: Vec<String> = std::env::args().collect();
Açıklama: std::env::args() program argümanlarını String olarak verir.
3 Komut satırı ve args
| Kavram | Anlamı |
|---|---|
not liste |
["not", "liste"] |
not |
["not"] |
not ekle süt |
["not", "ekle", "süt"] |
args.get(5) |
None |