Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
10m 10s
C# konsol uygulamaları, bir programın kullanıcıdan nasıl girdi okuduğunu ve çıktı gösterdiğini öğrenmenin her zaman en basit yoludur. Tim Corey, Spectre.Console serisinde, sıradan siyah-beyaz komut isteminin çok ötesine nasıl geçileceğini gösteriyor. Bu makalede, "Kullanıcıdan Veri İsteme - Spectre Console Serisi" videosunu yakından inceleyeceğiz ve nasıl girdi topladığını, sayısal değerleri nasıl işlediğini, hata kontrolü yaptığını ve programına daha kullanıcı dostu bir görünüm kazandırdığını göreceğiz — bunların hepsini şablon kodu elle değiştirmeden. Zaman damgaları, videodaki doğru noktaya atlamak için dahil edilmiştir.
Başlangıçta Tim, Spectre.Console'un sıradan C komut satırı girdisini görsel olarak çekici bir şeye dönüştürebileceğini hatırlatır. Console.ReadLine() ile standart girdiyi manuel olarak okumak, bunu ayrıştırmak ve istisnalarla başa çıkmak yerine, tam bir static void Main(string[] args) metodu yazmak yerine, Spectre.Console sizin için bunları halleder.
Tim'in sözleriyle (0:17), bu oturum "kullanıcıdan girdi isteme, verileri doğrulama ve uygun veri türüne dönüştürme" yöntemlerini gösterecek — bir konsol veya komut istemi ile çalışan herhangi bir geliştirici için temel bir beceri.
Tim'in ilk örneği (0:35) tanıdık bir konudur: kullanıcıya yaşını sormak. Geleneksel olarak C# dilinde şöyle yazardınız:
static void Main(string[] args)
{
Console.Write("Enter integer age: ");
string input = Console.ReadLine();
int age = int.Parse(input);
}Sub Main(ByVal args As String())
Console.Write("Enter integer age: ")
Dim input As String = Console.ReadLine()
Dim age As Integer = Integer.Parse(input)
End SubBu, bir C# programının klasik giriş noktasını, ana fonksiyonu ve konsol üzerinden klavyeden bir giriş parametresi almayı gösterir. String girdisini int yaşa dönüştürmek için ayrıca int.Parse veya Convert.ToInt32 kullanmanız gerekir. Tim, geçersiz girdileri kendiniz ele almanız ve istisnaları atmanız veya yakalamanız gerektiğini belirtir.
Spectre.Console ile, basitçe yazar:
int age = AnsiConsole.Ask<int>("What is your age?");Dim age As Integer = AnsiConsole.Ask(Of Integer)("What is your age?")Bu tek satır, girişi okur, tamsayı değerine dönüştürür ve kullanıcı sayısal olmayan karakterler yazarsa kırmızı bir hata mesajı gösterir — ekstra hata kontrol kodu gerektirmez. Kullanıcı Enter tuşuna bastığında, yöntem girdiyi okur, sayısal bir tipe dönüştürür ve age değişkeninde saklar.
Sonraki (1:14) Tim, Boolean istemeyi gösteriyor:
bool isHappy = AnsiConsole.Ask<bool>("Are you happy?");Dim isHappy As Boolean = AnsiConsole.Ask(Of Boolean)("Are you happy?")Kullanıcı "true" veya "false" girerse, çalışır. Ama eğer "evet" yazarlarsa, Spectre.Console kırmızı bir hata gösterir. Bu, Ask<bool> veri türlerini otomatik olarak işlerken, kullanıcı girdileri için her zaman en doğal yöntem olmadığını gösterir.

Burası, Tim'in daha esnek bir API olan Prompt'a geçtiği yerdir; bu, özelleştirebileceğiniz bir mini sınıf gibi davranır.
3:02'de Tim, Ask'tan TextPrompt<string> ile Prompt'a geçiyor. Dahili Boolean yerine, kullanıcının gerçek seçimler yapabilmesini sağlayan bir metin isteminin yeni bir örneğini oluşturur:
var happyText = AnsiConsole.Prompt(
new TextPrompt<string>("Are you happy?")
.AddChoice("Yes")
.AddChoice("No"));Dim happyText = AnsiConsole.Prompt(
New TextPrompt(Of String)("Are you happy?").
AddChoice("Yes").
AddChoice("No"))Program çalıştığında (4:48), soru sonrasında konsolda [Yes/No] gösterecektir. Bu, kullanıcıya kabul edilebilir yanıtları kolayca görmesi için komut satırını süsleyen Spectre.Console'dur. Başka bir şey yazarsanız, yöntem onu alır, liste ile kontrol eder ve mevcut bir seçeneği seçmenizi söyleyen bir mesaj görüntüler.

Tim daha sonra varsayılan bir değer ekler (5:16):
.DefaultValue("Yes").DefaultValue("Yes")Şimdi, program çalıştığında, kullanıcı sadece Enter tuşuna basabilir — bir metin olmadan satır sonu — ve yöntem otomatik olarak değişkene "Evet" atar. Bu, ana yönteminizde ek kod olmadan makul bir varsayılan değeri saklamak istediğinizde harikadır.
6:01'de Tim, tam sayı girişiyle daha zengin bir örnek gösteriyor. Yeni bir TextPrompt kullanarak tekrar yaş sormak için bir prompt oluşturuyor, ancak doğrulama mantığını direkt prompt içine ekliyor:
int age = AnsiConsole.Prompt(
new TextPrompt<int>("What is your age?")
.Validate(x =>
{
return x switch
{
< 0 => ValidationResult.Error("[red]You were not born yet[/]"),
> 120 => ValidationResult.Error("[red]You are too old[/]"),
_ => ValidationResult.Success(),
};
}));Dim age As Integer = AnsiConsole.Prompt(
New TextPrompt(Of Integer)("What is your age?").Validate(Function(x)
Select Case x
Case Is < 0
Return ValidationResult.Error("[red]You were not born yet[/]")
Case Is > 120
Return ValidationResult.Error("[red]You are too old[/]")
Case Else
Return ValidationResult.Success()
End Select
End Function))Burada komut istemi, standart giriş akışındaki dize değerlerini sayısal bir türe dönüştürmekle kalmayıp, aynı zamanda negatif yaşlara izin vermemek gibi iş kurallarına dayalı hata kontrolünü de gerçekleştiriyor. Tim bunu canlı olarak test ediyor (8:31): -1 girmek "Henüz doğmadınız." uyarısını tetikler. 150 girmek "Çok yaşlısınız." uyarısını tetikler. Sadece geçerli girdi programın bir sonraki satıra devam etmesine izin verir.

metodlarını
9:00'da Tim özetler:
Daha güçlü. Seçenekler, varsayılanlar ve doğrulamalar eklemenizi sağlar. Konsol uygulamanızı zenginleştirirken veya komut satırı argümanlarıyla yürütülebilir dosyanızı çağıran diğer programlarla entegre ederken harikadır.
Her iki yaklaşım da static void Main(string[] args) veya hatta public static void Main(string[] args) giriş noktasına hâlâ düzgün bir şekilde oturur. Program yürütüldüğünde geçirilen komut satırı argümanlarını okumak için args'a da erişebilir, bunu Spectre.Console istemleriyle birleştirebilir ve string.Format veya interpolasyon kullanarak düzgün biçimlendirilmiş bir dize çıkışı alabilirsiniz.
Tim, bu yaklaşımın "kullanıcıdan bilgi isteme yeteneğinizi bir sonraki seviyeye taşıdığını" belirterek kapatıyor (9:19). Spectre.Console ile artık klavye girişini okumak, Convert sınıfı ile dönüştürmek ve varsayılan mesajları göstermek için tekrarlayan kod yazmıyorsunuz. Bunun yerine şunu alırsınız:
Komut isteminde renkli zengin çıktı.
Geçersiz giriş için kullanıcı dostu hata işleme.
Bu, yeni başlayanlara ana yöntem, veri türleri ve giriş parametreleri hakkında öğretmeyi, Visual Studio veya herhangi bir başka editörde profesyonel düzeyde konsol uygulamaları yazarken bile daha kolay hale getirir.
Tim Corey'nin videodaki adım adım anlatımını takip ederek şunları öğrenirsiniz:
Spectre.Console'un Ask özelliğini kullanıcı girdisini okumak ve dönüştürmek için nasıl kullanacağınızı öğrenin.
Seçenekler, varsayılanlar ve doğrulama sunmak için TextPrompt özelliğini nasıl kullanacağınızı öğrenin.
Main(string[] args) giriş noktanıza ve komut satırı argümanlarına bu istemlerin nasıl doğal bir şekilde uyduğunu.
Tim'in gösterdiği her şey, komut istemcisi üzerinden çalıştırabileceğiniz, argümanlar iletebileceğiniz veya daha büyük Windows Forms uygulamalarına ya da araçlarına gömebileceğiniz tek bir yürütülebilir dosya olarak derlenir. Kullanıcıdan gelen girişi daha modern bir şekilde ele alırken, C# konsolunun ve ona aşina olunan ana fonksiyonunun sadeliğini korumanın modern bir yolu.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy