IRONSOFTWAREHOME

Żądanie danych od użytkownika - seria Spectre Console

Pobieranie danych od użytkownika - seria Spectre Console

Tim Corey

10m 10s

Aplikacje konsolowe C# zawsze były najprostszym sposobem na naukę, jak program odczytuje dane wejściowe od użytkownika i wyświetla wyjście. W swojej serii Spectre.Console, Tim Corey pokazuje, jak wyjść poza zwykły czarno-biały wiersz polecenia. W tym artykułe przyjrzymy się dokładnie jego wideo "Requesting Data from the User - Spectre Console Series", aby zobaczyć, jak zbiera dane wejściowe, obsługuje wartości numeryczne, wykonuje sprawdzanie błędów i nadaje swojemu programowi przyjaźniejszy wygląd — wszystko bez ręcznej modyfikacji kodu szablonowego. Dołączone są znaczniki czasu, abyś mógł przeskoczyć do właściwego miejsca w wideo.

Wprowadzenie: Ułatwione wprowadzanie danych w wierszu polecenia

Na samym początku Tim przypomina nam, że Spectre.Console może przekształcić zwykłe wejście wiersza polecenia C w coś wizualnie atrakcyjnego. Zamiast pisać pełną metodę static void Main(string[] args), a następnie ręcznie wczytywać ze standardowego strumienia wejściowego za pomocą Console.ReadLine(), analizować go i radzić sobie z wyjątkami, Spectre.Console opakowuje to za ciebie.

Według słów Tima (0:17), ta sesja pokaże, jak "poprosić użytkownika o dane wejściowe, zweryfikować dane i przekonwertować je na odpowiedni typ danych" — kluczowa umiejętność dla każdego programisty pracującego z konsolą lub wierszem polecenia.

Odczytywanie wartości całkowitych za pomocą Ask

Pierwszy przykład Tima (0:35) jest dobrze znany: zapytaj użytkownika o jego wiek. Tradycyjnie w C# napisałbyś:

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

To pokazuje klasyczny punkt wejścia programu C#, główną funkcję oraz to, jak otrzymać parametr wejściowy z klawiatury przez konsolę. Musisz także użyć int.Parse lub Convert.ToInt32, aby przekonwertować wejście w postaci stringa na int age. Tim zauważa, że musisz samodzielnie obsłużyć nieprawidłowe wejście i samodzielnie rzucać lub przechwytywać wyjątki.

Z Spectre.Console po prostu pisze:

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

To jedna linia wczytuje dane wejściowe, konwertuje je na wartość całkowitą i wyświetla czerwony komunikat o błędzie, jeśli użytkownik wpisze znaki nienumeryczne — bez konieczności dodatkowego kodu sprawdzania błędów. Gdy użytkownik naciśnie Enter, metoda czyta dane wejściowe, analizuje je na typ numeryczny i przechowuje je w zmiennej age.

Wprowadzenie typu Boolean i dlaczego Prompt jest lepszy

Następnie (1:14) Tim demonstruje, jak zapytać o wartość typu Boolean:

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

Jeśli użytkownik wpisze "true" lub "false", działa. Ale jeśli wpisze "yes", Spectre.Console wyświetla czerwony błąd. To pokazuje, że chociaż Ask<bool> obsługuje typy danych automatycznie, nie zawsze jest to najbardziej naturalne dla danych wejściowych użytkownika.

W tym miejscu Tim przechodzi do bardziej elastycznego API — Prompt — które działa bardziej jak mini klasa, którą można dostosować.

Używanie TextPrompt do wyborów

O godzinie 3:02 Tim przechodzi z Ask do Prompt z TextPrompt<string>. Zamiast wbudowanego Booleana, tworzy nową instancję tekstowego promptu, która daje użytkownikowi rzeczywiste wybory:

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

Gdy program się wykonuje (4:48), po pytaniu w konsoli pojawia się [Yes/No]. To Spectre.Console dekoruje wiersz poleceń, aby użytkownik mógł łatwo zobaczyć akceptowalne odpowiedzi. Jeśli wpiszesz cokolwiek innego, metoda to odbiera, sprawdza na liście i wyświetla przyjazny komunikat, mówiąc, aby wybrać dostępną opcję.

Dodawanie wartości domyślnej

Następnie Tim dodaje wartość domyślną (5:16):

.DefaultValue("Yes")

Teraz, gdy program działa, użytkownik może po prostu nacisnąć Enter — powrót karetki bez tekstu — a metoda automatycznie przypisuje "Yes" do zmiennej. To świetne, gdy chcesz przechowywać rozsądną wartość domyślną bez dodatkowego kodu w głównej metodzie.

Zadawanie pytań o liczby całkowite z walidacją

O godzinie 6:01 Tim pokazuje bardziej złożony przykład z wejściem liczby całkowitej. Używa nowego TextPrompt, aby ponownie zapytać o wiek, ale dodaje logikę walidacji wewnątrz samego promptu:

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

Tutaj prompt nie tylko konwertuje wartości string ze standardowego strumienia wejściowego na typ numeryczny, ale także wykonuje sprawdzanie błędów na podstawie reguł biznesowych — na przykład nie pozwalając na ujemne wieki. Tim testuje to na żywo (8:31): wpisanie -1 powoduje "Nie byłeś jeszcze urodzony." Wpisanie 150 powoduje "Jesteś za stary." Tylko prawidłowe wejście pozwala programowi przejść do następnej linii.

Ta wbudowana walidacja eliminuje potrzebę ręcznego pisania instrukcji if w swojej głównej funkcji, wywoływania metod analizy i obsługi wyjątków.

Ask vs Prompt: kiedy używać każdego z nich

O godzinie 9:00 Tim podsumowuje:

  • Ask: Szybki i prosty. Idealne, gdy twój program potrzebuje tylko odczytać jeden parametr wejściowy i przekonwertować go na znany typ.

  • Prompt: bardziej potężne. Pozwala dodawać wybory, wartości domyślne i walidacje. Świetne, gdy tworzysz bogatszą aplikację konsolową lub integrujesz się z innymi programami, które wywołują twój plik wykonywalny z argumentami wiersza poleceń.

Obie metody nadal pasują zgrabnie do twojego static void Main(string[] args) lub nawet public static void Main(string[] args) entry point. Możesz także uzyskać dostęp do args, aby odczytać argumenty wiersza poleceń przekazywane przy uruchomieniu programu, połączyć je z promptami Spectre.Console i uzyskać starannie sformatowaną odpowiedź za pomocą string.Format lub interpolacji.

Dlaczego to jest ważne dla deweloperów konsolowych

Tim kończy (9:19) podkreślając, jak to podejście "wznosi twoją zdolność do pytania użytkownika o dane wejściowe na wyższy poziom." Z Spectre.Console nie piszesz już powtarzalnego kodu do odczytu wejścia z klawiatury, konwersji z użyciem klasy Convert i wyświetlania domyślnych komunikatów. Zamiast tego zyskujesz:

  • Bogate wyjście w kolorze na wierszu poleceń.

  • Automatyczne analizowanie typów numerycznych, wartości podwójnych lub wartości łańcucha.

  • Przyjazna obsługa błędów dla nieprawidłowego wejścia.

  • Możliwość łączenia promptów z tradycyjnymi argumentami wiersza poleceń dla hybrydowych modeli wejściowych.

To ułatwia nauczanie początkujących o głównej metodzie, typach danych i parametrach wejściowych, a jednocześnie piszesz profesjonalnej klasy aplikacje konsolowe w Visual Studio lub dowolnym innym edytorze.

Wnioski

Śledząc wytyczne Tima Coreya w wideo, uczysz się:

  • Jak używać Spectre.Console's Ask do odczytywania i konwersji danych wejściowych użytkownika.

  • Jak używać TextPrompt do prezentacji wyborów, domyślnych wartości i walidacji.

  • Jak te prompty naturalnie pasują do twojego Main(string[] args) entry point obok argumentów wiersza poleceń.

  • Jak zredukować powtarzalne sprawdzanie błędów i uczynić twoje aplikacje wiersza poleceń bardziej przyjaznymi.

Wszystko, co pokazuje Tim, nadal kompiluje się do pojedynczego pliku wykonywalnego, który można uruchomić z wiersza poleceń, przesyłać do niego argumenty lub osadzić w większych aplikacjach Windows Forms lub narzędziach. To nowoczesny sposób obsługi danych wejściowych użytkownika, zachowując prostotę konsoli C# i jej znajomej głównej funkcji.

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta