Altbilgi içeriğine atla
Iron Academy Logo
C# Uygulaması
C# Uygulaması

Diğer Kategoriler

Kullanıcıdan Veri İsteme - Spectre Console Serisi

Tim Corey
10m 10s

C# konsol uygulamaları her zaman bir programın kullanıcıdan nasıl girdi okuduğunu ve çıktıyı nasıl görüntülediğini öğrenmenin en basit yolu olmuştur. Spectre.Console serisinde Tim Corey, düz siyah-beyaz komut isteminin ötesine geçmenin yollarını gösteriyor. Bu makalede, "Kullanıcıdan Veri Talep Et - Spectre Console Serisi" videosunu yakından inceleyerek girdi toplama, sayısal değerlerle çalışma, hata kontrolü yapma ve programa daha kullanıcı dostu bir görünüm kazandırma gibi konuları ele alacağız — tümü şablon kodu manuel olarak değiştirmeden. Video içerisindeki doğru yere atlayabilmeniz için zaman damgaları da eklenmiştir.

Giriş: Komut Satırı Girişi Daha Kolay Hale Getirildi

Tam başlangıçta Tim, Spectre.Console'ın sıradan C komut satırı girişini görsel olarak çekici hale getirebileceğini hatırlatır. Tüm bir static void Main(string[] args) yöntemini yazmak ve ardından Console.ReadLine() ile standart giriş akışından manuel olarak okumak, analiz etmek ve istisnalarla ilgilenmek yerine, Spectre.Console bunu sizin için paketler.

Tim'in sözleriyle (0:17), bu oturum "Kullanıcıdan girdi istemeyi, veriyi doğrulamayı ve uygun veri tipine dönüştürmeyi" gösterecek — konsol veya komut istemi ile çalışan herhangi bir geliştirici için temel bir yetenek.

Ask ile Tam Sayı Değerlerini Okuma

Tim'in ilk örneği (0:35) tanıdık bir örnektir: kullanıcıdan yaşını sormak. Geleneksel olarak C#'ta şöyle yazardınız:

static void Main(string[] args)
{
    Console.Write("Enter integer age: ");
    string input = Console.ReadLine();
    int age = int.Parse(input);
}
static void Main(string[] args)
{
    Console.Write("Enter integer age: ");
    string input = Console.ReadLine();
    int age = int.Parse(input);
}

Bu, bir C# programının klasik giriş noktası olan ana işlevi ve klavyeye aracılığıyla konsoldan bir giriş parametresini nasıl aldığınızı gösterir. String girdiyi bir int yaşa dönüştürmek için int.Parse veya Convert.ToInt32 kullanmanız gerekir. Tim, geçersiz girdi ile ilgili olarak kendinizin istisnalarla ilgilenmeniz ve bunları yakalamanız gerektiğine dikkat çeker.

Spectre.Console ile, basitçe şöyle yazar:

int age = AnsiConsole.Ask<int>("What is your age?");
int age = AnsiConsole.Ask<int>("What is your age?");

Bu tek satır girdiyi okur, tam sayı değerine dönüştürür ve kullanıcı sayısal olmayan karakterler yazarsa kırmızı bir hata mesajı görüntüler — ekstra hata kontrol kodu gerekmez. Kullanıcı Enter tuşuna bastığında yöntem girdiyi okur, sayısal bir türe çevirir ve age değişkenine kaydeder.

Boolean Girişi ve Neden İstemin Daha İyi Olduğu

Sonraki (1:14) Tim bir Boolean sormayı gösterir:

bool isHappy = AnsiConsole.Ask<bool>("Are you happy?");
bool isHappy = AnsiConsole.Ask<bool>("Are you happy?");

Eğer kullanıcı "true" veya "false" girerse çalışır. Ama eğer "yes" yazarsa, Spectre.Console kırmızı bir hata gösterir. Bu, Ask'in veri türlerini otomatik olarak işlediğini, ancak kullanıcı girdisi için her zaman en doğal olmadığını gösterir.

Spectre Console Requesting Data User 1 related to Boolean Girişi ve Neden İstemin Daha İyi Olduğu

Tim'in burada daha esnek bir API'ye — İstem'e (Prompt) — geçtiği görülür; bu yapı mini bir sınıf gibi davranır ve özelleştirmeye olanak tanır.

Seçimler için TextPrompt kullanma

3:02'de Tim, Ask'tan Prompt'a bir TextPromptile geçiş yapar. Yerleşik Boolean yerine, kullanıcıya gerçek seçenekler sunan yeni bir text prompt örneği oluşturur:

var happyText = AnsiConsole.Prompt(
    new TextPrompt<string>("Are you happy?")
        .AddChoice("Yes")
        .AddChoice("No"));
var happyText = AnsiConsole.Prompt(
    new TextPrompt<string>("Are you happy?")
        .AddChoice("Yes")
        .AddChoice("No"));

Program çalıştığında (4:48), soru sonrasında konsoldan [Yes/No] görüntülenir. Bu, Spectre.Console'ın komut satırını süsleyerek kullanıcıya kabul edilebilir cevapları kolayca görmesine imkan tanımasıdır. Bir başka şey yazarsanız, yöntem onu alır, listeye göre kontrol eder ve size mevcut bir seçeneği seçmenizi söyleyen bir mesaj gösterir.

Spectre Console Requesting Data User 2 related to Seçimler için TextPrompt kullanma

Varsayılan Bir Değer Ekleme

Tim ardından bir varsayılan değer ekler (5:16):

.DefaultValue("Yes")
.DefaultValue("Yes")

Artık, program çalıştığında, kullanıcı Enter tuşuna basabilir — metin girmeden bir satır başı yapar — ve yöntem otomatik olarak değişkene "Yes" atar. Ana yönteminizde ekstra kod olmadan makul bir varsayılan değeri saklamak istediğinizde bu harikadır.

Geçerli Tamsayı Sorgulama

Tim 6:01'de, tamsayı girdisiyle daha zengin bir örnek gösterir. Yaşı tekrar sormak için yeni bir TextPrompt kullanır ancak hemen istemin içine doğrulama mantığı ekler:

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(),
            };
        }));
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(),
            };
        }));

Buradaki istem, standart giriş akışından gelen string değerleri sayısal bir tipe dönüştürür; ayrıca iş kurallarına dayalı hata kontrolü yapar — negatif yaşlara izin vermemek gibi. Tim canlı olarak test eder (8:31): -1 girişi "Henüz doğmadınız." tetikler. 150 girişi "Çok yaşlısınız." tetikler. Sadece geçerli giriş programın bir sonraki satıra devam etmesine izin verir.

Spectre Console Requesting Data User 3 related to Geçerli Tamsayı Sorgulama

Bu yerleşik doğrulama, ana işlevinizde manuel olarak if deyimleri yazma, parse metodlarını çağırma ve hataları yönetme ihtiyacını ortadan kaldırır.

Ask ve Prompt: Ne Zaman Hangisi Kullanılır

Tim 9:00'da özetler:

  • Ask: Hızlı ve basit. Programınızın yalnızca bir girdi parametresini okuyup bilinen bir türe dönüştürdüğünde mükemmeldir.

  • Prompt: Daha güçlü. Seçenekler, varsayılanlar ve doğrulamaları eklemenize izin verir. Zengin bir konsol uygulaması oluşturduğunuzda veya yürütülebilir dosyanızı komut satırı argümanlarıyla çağıran diğer programlarla entegre olduğunuzda harikadır.

Her iki yaklaşım da statik void Main(string[] args) veya hatta public static void Main(string[] args) giriş noktanıza düzgün bir şekilde uyar. Ayrıca args'a erişerek program çalıştırıldığında geçirilen komut satırı argümanlarını okuyabilir, bu durumu Spectre.Console istemleriyle birleştirebilir ve string.Format veya enterpolasyon kullanarak düzgün formatlanmış bir string çıktısı verebilirsiniz.

Konsol Geliştiricileri İçin Neden Önemlidir

Tim kapanışı (9:19), bu yaklaşımın "kullanıcıdan girdi isteme yeteneğinizi bir sonraki seviyeye taşıdığını" belirterek yapıyor. Spectre.Console ile artık klavye girdisini okumak, Convert sınıfı ile dönüştürmek ve varsayılan mesajlar göstermek için tekrar eden kod yazmanız gerekmiyor. Bunun yerine:

  • Komut isteminde renkli zengin çıktı.

  • Sayısal türler, çift değerler veya string değerlerin otomatik ayrıştırılması.

  • Geçersiz girişler için dostça hata işleme.

  • Hibrit girdi modelleri için istemleri geleneksel komut satırı argümanlarıyla birleştirme yeteneği.

Bu, yeni başlayanlara ana yöntem, veri türleri ve giriş parametreleri hakkında bilgi vermeyi kolaylaştırır ve Visual Studio veya başka bir editörde profesyonel düzeyde konsol uygulamaları yazmanızı sağlar.

Sonuç

Tim Corey'nin videodaki yürütmesini takip ederek öğrenirsiniz:

  • Kullanıcı girdisini okumak ve dönüştürmek için Spectre.Console'un Ask yöntemini nasıl kullanacağınızı öğrenin.

  • Seçenekleri, varsayılanları ve doğrulamayı sunmak için TextPrompt yöntemini nasıl kullanacağınızı öğrenin.

  • Bu istemlerin Main(string[] args) giriş noktanıza kolayca nasıl uyduğunu, komut satırı argümanlarıyla birlikte.

  • Gereksiz hata kontrolünü azaltmayı ve komut satırı uygulamalarınızı daha dost canlısı hale getirmeyi.

Tim'in gösterdiği her şey hala tek bir yürütülebilir dosyaya derlenir ve komut isteminden çalıştırılabilir, argümanlar aktarılabilir veya daha büyük Windows Forms uygulamalarına veya araçlarına gömülebilir. Bu, kullanıcının girdilerini yönetmede modern bir yöntemdir, C# konsolunun ve onun alışılmış ana fonksiyonunun basitliğini korurken.

Hero Worlddot related to Kullanıcıdan Veri İsteme - Spectre Console Serisi
Hero Affiliate related to Kullanıcıdan Veri İsteme - Spectre Console Serisi

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js üzerinde çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara