CodeBlanks Logo Icon CodeBlanks

Komut iskeleti

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
let args: Vec<String> = std::env::____().collect();
Cevap
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

Orta seviye bölümündeki tüm dersler