Sıfırdan Console Uygulaması: Argument Parser Yazma

Komut satırı uygulamalarında kullanıcıdan alınan argümanları düzgün şekilde işlemek gerek. `--name John --age 30` gibi parametreleri otomatik olarak okuyabilen bir parser yazalım.

Bu örnek, basit key-value çiftlerini Dictionary'ye çeviriyor ve tip dönüşümü yapıyor. Böylece her argümanı manuel olarak parse etmek yerine temiz bir yapı oluşturuyoruz.

1using System;
2using System.Collections.Generic;
3using System.Linq;
4
5class Program
6{
7static void Main(string[] args)
8{
9var parser = new ArgumentParser(args);
10
11string name = parser.GetValue("name", "Guest");
12int age = parser.GetInt("age", 0);
13bool verbose = parser.HasFlag("verbose");
14
15Console.WriteLine($"Ad: {name}");
16Console.WriteLine($"Yaş: {age}");
17Console.WriteLine($"Verbose: {verbose}");
18}
19}
20
21class ArgumentParser
22{
23private Dictionary<string, string> _args;
24
25public ArgumentParser(string[] args)
26{
27_args = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
28
29for (int i = 0; i < args.Length; i++)
30{
31if (args[i].StartsWith("--"))
32{
33string key = args[i].Substring(2);
34
35if (i + 1 < args.Length &&!args[i + 1].StartsWith("--"))
36{
37_args[key] = args[i + 1];
38i++;
39}
40else
41{
42_args[key] = "true";
43}
44}
45}
46}
47
48public string GetValue(string key, string defaultValue = null)
49{
50return _args.ContainsKey(key)? _args[key]: defaultValue;
51}
52
53public int GetInt(string key, int defaultValue = 0)
54{
55if (_args.ContainsKey(key) && int.TryParse(_args[key], out int result))
56return result;
57return defaultValue;
58}
59
60public bool HasFlag(string key)
61{
62return _args.ContainsKey(key);
63}
64}

Çalıştırma:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1dotnet run -- --name Ali --age 25 --verbose

Beklenen çıktı:

1Ad: Ali
2Yaş: 25
3Verbose: True

Sık yapılan hata: Argüman sırası önemlidir. `--name` yazıp hemen sonra değeri yazmayı unutmak. Parser değer bulmazsa default döner, bu da sessiz hatalara yol açabilir. Üretim kodunda argüman listesini ekrana yazdırıp debug etmek faydalı olur.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz