Option flag
- Rust kursu
- Orta seviye
- Ders 98/115
- 4 dk
--flag ile seçenek ve bool flag tanımlarsın.
Option flag
Alan türü Option<T> ise argüman isteğe bağlıdır; verilmezse None olur. Bu, "kullanıcı belirtmediyse başka bir kaynağa bak" mantığını kurmayı kolaylaştırır:
#[derive(Parser)]
struct Args {
/// Dinlenecek port
#[arg(short, long)]
port: Option<u16>,
}
let port = args.port
.or_else(|| std::env::var("PORT").ok()?.parse().ok())
.unwrap_or(8080);Sıra genellikle: komut satırı → ortam değişkeni → yapılandırma dosyası → varsayılan.
Kısa ve uzun biçim
clap -p 8080, --port 8080 ve --port=8080 biçimlerinin hepsini kabul eder. Elle yazarken iki adı birden aramak gerekir:
fn port_oku(args: &[&str]) -> Result<Option<u16>, String> {
match args.iter().position(|a| *a == "-p" || *a == "--port") {
None => Ok(None),
Some(i) => {
let s = args.get(i + 1).ok_or("--port için değer eksik")?;
s.parse().map(Some).map_err(|_| format!("geçersiz port: {s}"))
}
}
}Uygulama İsteğe bağlı port
Yukarıdaki port_oku fonksiyonunu yaz. ["-p", "8080"] ve boş argüman listesi için sonuçları {:?} ile boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn port_oku(args: &[&str]) -> Result<Option<u16>, String> {
match args.iter().position(|a| *a == "-p" || *a == "--port") {
None => Ok(None),
Some(i) => {
let s = args.get(i + 1).ok_or("--port için değer eksik")?;
s.parse().map(Some).map_err(|_| format!("geçersiz port: {s}"))
}
}
}
fn main() {
let a = port_oku(&["-p", "8080"]).unwrap();
let b = port_oku(&[]).unwrap();
println!("{:?} {:?}", a, b);
}Beklenen çıktı
Some(8080) None
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Option<u16></code> ile <code>default_value_t</code> arasındaki fark nedir?
- Option zorunlu yapar
- default_value_t derlenmez
- Option ile "verilmedi" bilgisi korunur; varsayılanla kaybolur Doğru cevap
- Fark yok
Açıklama: Kullanıcının değeri açıkça verip vermediği önemliyse Option kullan.
2 İsteğe bağlı alan
#[arg(short, long)]
port: ____,
#[arg(short, long)]
port: Option<u16>,
Açıklama: Option<T> türü argümanı isteğe bağlı yapar.
3 Komut satırı ve port
| Kavram | Anlamı |
|---|---|
-p 8080 |
Some(8080) |
--port 9000 |
Some(9000) |
(yok) |
None |
-p abc |
Hata |