clap tanımı
- Rust kursu
- Orta seviye
- Ders 95/115
- 4 dk
clap crate'i ile CLI temelini öğrenirsin.
clap tanımı
clap, Rust'ın en yaygın komut satırı argüman ayrıştırıcısıdır. Bir struct tanımlarsın; clap argümanları okur, türlerine çevirir, eksik ya da hatalı girdide açıklayıcı hata ve otomatik --help üretir:
// Cargo.toml: clap = { version = "4", features = ["derive"] }
use clap::Parser;
#[derive(Parser)]
struct Args {
#[arg(long)]
ad: String,
}
fn main() {
let args = Args::parse();
println!("Merhaba {}", args.ad);
}
// $ selam --ad Ece → Merhaba EceAlıştırma ortamında dış crate olmadığı için clap'in arka planda yaptığını elle yazacağız; bu, kütüphanenin ne kadar iş kazandırdığını da gösterir.
Elle ayrıştırma
Bir bayrağın değerini bulmak için argümanlar arasında adı aranır ve sonraki eleman alınır:
struct Args {
ad: String,
}
fn ayristir(args: &[&str]) -> Result<Args, String> {
let i = args.iter().position(|a| *a == "--ad").ok_or("--ad gerekli")?;
let ad = args.get(i + 1).ok_or("--ad için değer eksik")?;
Ok(Args { ad: ad.to_string() })
}ok_or, Option'ı hata mesajlı bir Result'a çevirir.
Uygulama Bayrak oku
Yukarıdaki Args ve ayristir kodunu yaz. ["selam", "--ad", "Ece"] için Merhaba Ece, ["selam"] için hata mesajını hata: ... biçiminde yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
struct Args {
ad: String,
}
fn ayristir(args: &[&str]) -> Result<Args, String> {
let i = args.iter().position(|a| *a == "--ad").ok_or("--ad gerekli")?;
let ad = args.get(i + 1).ok_or("--ad için değer eksik")?;
Ok(Args { ad: ad.to_string() })
}
fn main() {
for girdi in [vec!["selam", "--ad", "Ece"], vec!["selam"]] {
match ayristir(&girdi) {
Ok(a) => println!("Merhaba {}", a.ad),
Err(e) => println!("hata: {}", e),
}
}
}Beklenen çıktı
Merhaba Ece hata: --ad gerekli
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Args::parse()</code> zorunlu <code>--ad</code> verilmezse ne yapar?
- None döndürür
- Hata mesajı ve kullanım bilgisi yazıp programı sonlandırır Doğru cevap
- Boş metin kullanır
- Panic verir
Açıklama: parse hatada çıkar; hatayı kendin ele almak istersen try_parse bir Result döndürür.
2 Ayrıştırıcı trait'i
#[derive(____)]
struct Args {
#[arg(long)]
ad: String,
}
#[derive(Parser)]
struct Args {
#[arg(long)]
ad: String,
}
Açıklama: clap'in derive arayüzü Parser trait'idir.
3 Komut satırı ve sonuç
| Kavram | Anlamı |
|---|---|
selam --ad Ece |
Merhaba Ece |
selam |
Hata: --ad gerekli |
selam --ad |
Hata: değer eksik |
selam --help |
Otomatik yardım |