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;45class Program6{7static void Main(string[] args)8{9var parser = new ArgumentParser(args);1011string name = parser.GetValue("name", "Guest");12int age = parser.GetInt("age", 0);13bool verbose = parser.HasFlag("verbose");1415Console.WriteLine($"Ad: {name}");16Console.WriteLine($"Yaş: {age}");17Console.WriteLine($"Verbose: {verbose}");18}19}2021class ArgumentParser22{23private Dictionary<string, string> _args;2425public ArgumentParser(string[] args)26{27_args = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);2829for (int i = 0; i < args.Length; i++)30{31if (args[i].StartsWith("--"))32{33string key = args[i].Substring(2);3435if (i + 1 < args.Length &&!args[i + 1].StartsWith("--"))36{37_args[key] = args[i + 1];38i++;39}40else41{42_args[key] = "true";43}44}45}46}4748public string GetValue(string key, string defaultValue = null)49{50return _args.ContainsKey(key)? _args[key]: defaultValue;51}5253public int GetInt(string key, int defaultValue = 0)54{55if (_args.ContainsKey(key) && int.TryParse(_args[key], out int result))56return result;57return defaultValue;58}5960public 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 --verboseBeklenen çıktı:
1Ad: Ali2Yaş: 253Verbose: TrueSı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.
0 yorum