Wybieranie elementów z listy - seria Spectre Console
Spectre Console to potężny pakiet NuGet dla .NET, który umożliwia programistom tworzenie interaktywnych aplikacji konsolowych zamiast zwykłych, statycznych programów tekstowych. Jedną z jego najbardziej przydatnych funkcji jest Spectre Console Selection Prompt, który pozwala na prezentację listy opcji, przez które użytkownik może przewijać i wybierać bezpośrednio za pomocą klawiatury. To sprawia, że wprowadzanie danych w konsoli jest bardziej niezawodne, przyjazne dla użytkownika i wizualnie dopracowane w porównaniu do ręcznego wpisywania odpowiedzi.
W swoim filmie "Selecting Items from a List – Spectre Console Series" Tim Corey dokładnie pokazuje, jak używać tej funkcji. W tym artykułe będziemy śledzić jego wyjaśnienia krok po kroku, wskazując momenty czasowe, abyście mogli oglądać i kodować razem z nim. To świetny sposób na naukę tworzenia i dostosowywania Selection Prompt w własnych aplikacjach konsolowych .NET.
Wprowadzenie do lekcji
W 0:00 Tim wyjaśnia, że Spectre Console pozwala programistom przekształcić aplikacje konsolowe C# w atrakcyjne wizualnie i bogate w informacje aplikacje. Jego seria filmów omawia bibliotekę w 10-minutowych odcinkach, a linki do kodu źródłowego znajdują się w opisie.
W tej lekcji (0:18) Tim skupia się na tym, jak poprosić użytkownika o wybranie opcji z listy, a następnie użycie klawiatury do poruszania się po tej liście. Ten wzorzec "pytania i odpowiedzi" stanowi podstawę tworzenia aplikacji konsolowych, które sprawiają wrażenie nowoczesnych i interaktywnych. Przypomina również widzom (0:27), aby subskrybowali jego kanał i odwiedzili stronę iamtimcorey.com w celu uzyskania dodatkowych materiałów szkoleniowych.
Tworzenie monitu o wybór
W 0:34 Tim pokazuje listę nazw zastępczych, których często używa w swoich aplikacjach. Równie dobrze mogłaby to być lista owoców — jabłko, banan, pomarańcza — gdybyś chciał podać przykład "ulubionego owocu". Tworzy zmienną typu string, aby przechowywać odpowiedź, którą wybierze użytkownik:
string favoriteName;
string favoriteName;

Następnie, w 0:57, Tim przechodzi od podstawowego polecenia omówionego w poprzedniej lekcji do pełnej funkcji SelectionPrompt:
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);
Wyjaśnia (1:13), że SelectionPrompt wymaga tytułu, który w jego przypadku brzmi: "Jaka jest twoja ulubiona nazwa symbolu zastępczego". Gdybyś pytał o ulubiony owoc, zmieniłbyś tytuł odpowiednio na "Jaki jest twój ulubiony owoc".
Chociaż można ozdobić tekst (1:24) stylami Spectre Console — na przykład używając kolorów niebieskiego, zielonego lub szarego — w tej lekcji skupia się on na samym monicie wyboru.
W 1:39 Tim dodaje opcje — swoją listę nazw — wywołując metodę .AddChoices(). Wybory te mogą dotyczyć dowolnych elementów: owoców, liczb, obiektów, a nawet wyników funkcji "wyszukiwania".
Na koniec, o 1:55, Tim używa linii znaczników Spectre Console, aby wyświetlić wybraną pozycję użytkownikowi:
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");
W tym przypadku użyto znaczników wbudowanych, aby zaznaczyć wybraną odpowiedź na czerwono, ale równie dobrze można użyć koloru niebieskiego lub zielonego, jeśli wymaga tego motyw konsoli.
Uruchomienie monitu wyboru
O 2:34 Tim zapisuje i uruchamia kod. W konsoli wyświetla się:
-
Lista nazw lub owoców.
-
Klawisze strzałek pozwalają poruszać się w górę i w dół (2:41).
- Naciśnij klawisz Enter, aby wybrać pozycję.
Tim pokazuje, jak wybrać "Sue Storm" (2:50). Po naciśnięciu klawisza Enter lista znika, a konsola wyświetla:
Your favorite name is Sue Storm.
Your favorite name is Sue Storm.
Gdyby była to lista owoców, mogłoby się tam znaleźć: "Twoim ulubionym owocem jest banan" lub "Twoim ulubionym owocem jest jabłko".
Obsługa długich list
Następnie Tim porusza powszechny problem: długie listy. O 3:13 przedstawia właściwość PageSize służącą do ograniczania liczby widocznych elementów:
.PageSize(4)
.PageSize(4)
Wyjaśnia (3:19), że liczba cztery jest celowo niewielka, aby zademonstrować tę funkcję. Jednocześnie wyświetla się tylko tyle pozycji. Jeśli masz długą listę owoców — jabłko, banan, pomarańcza, mango, ananas — PageSize zapobiega niekończącemu się przewijaniu konsoli.
Aby pomóc użytkownikom, Tim dodaje komunikat MoreChoicesText w kolorze szarym o 3:34:
.MoreChoicesText("[grey](Move down to reveal more choices)[/]")
.MoreChoicesText("[grey](Move down to reveal more choices)[/]")
Ten tekst informuje użytkownika, że może przewinąć w dół, aby wyświetlić więcej opcji. Jest to szczególnie pomocne, gdy lista jest długa i chcesz uzyskać jasną wskazówkę, zamiast ryzykować błąd lub nieporozumienie.
Demonstracja zachowania długiej listy
Tim ponownie uruchamia program o 4:08:
-
Początkowo wyświetlane są tylko cztery opcje.
-
Szary komunikat brzmi: "Przesuń w dół, aby wyświetlić więcej opcji" (4:13).
-
Przewijanie w dół powoduje wyświetlenie dodatkowych pozycji.
- Przewinięcie w górę powoduje ponowne wyświetlenie pierwszych z nich (4:20).
Tim zauważa (4:25), że jest to idealne rozwiązanie w przypadku długich list — bez konieczności niekończącego się przewijania konsoli. Można wyświetlać 10 lub 15 elementów naraz i pozwolić użytkownikowi przeglądać pozostałe. Rozwiązuje to problem przeciążenia konsoli zbyt dużą ilością danych wyświetlanych jednocześnie.
Dłączego monit wyboru jest lepszy niż wpisywanie
O 4:38 Tim podkreśla, dłączego Selection Prompt jest lepszy niż pisanie:
-
Po dokonaniu wyboru lista znika (4:41).
- Wybrana odpowiedź jest widoczna od razu (4:45).
Porównuje to (5:05) do starych monitów, w których użytkownicy musieli wpisywać "tak" lub "nie". Dzięki SelectionPrompt można bezpośrednio zaproponować te opcje i pozwolić użytkownikom na wybór za pomocą klawiszy strzałek, co zmniejsza liczbę błędów i sprawia, że korzystanie z aplikacji jest płynniejsze.
Tim mówi (5:35), że pole wyświetlania jest "naprawdę fajnym dodatkiem", ponieważ upraszcza wprowadzanie danych, sprawia, że aplikacje konsolowe są bardziej interaktywne, oraz zapewnia jasne rozwiązanie problemów związanych z wprowadzaniem danych.
Inne zastosowania i przyszłe tematy
Tim wspomina (5:43), że ta lekcja dotyczy wybierania jednego elementu z listy. W przyszłych filmach pokaże monity wielokrotnego wyboru (5:39), w których użytkownicy mogą włączać i wyłączać wiele elementów, a następnie naciskać klawisz Enter, aby potwierdzić.
Zauważa również (5:47), że lista może zawierać dowolny typ obiektu — ciągi znaków, liczby całkowite, owoce, a nawet domyślne opcje zwracane przez funkcję. Na przykład można poprosić użytkownika o podanie ulubionego owocu ("jabłko", "banan", "pomarańcza") zamiast imienia (5:55).
Dzięki funkcji Selection Prompt w Spectre Console można nawet ustawić wartości domyślne, obsługiwać wymagańe odpowiedzi oraz dostosować działanie podejmowane po dokonaniu wyboru.
Wnioski
Tim kończy (6:01) swój film, potwierdzając, że właśnie w ten sposób wdraża się wybór elementów w Spectre Console — to przejrzysty i przyjazny dla użytkownika sposób obsługi list w aplikacjach konsolowych. Niezależnie od tego, czy pytasz o ulubiony owoc, liczbę czy przedmiot, monit wyboru zapewnia Twojej aplikacji dopracowane wrażenia bez dodatkowego pisania i błędów.
Najważniejsze wnioski z filmu Tima Coreya
-
Funkcja SelectionPrompt w Spectre Console pozwala użytkownikom poruszać się po listach za pomocą klawiszy strzałek zamiast ręcznego wpisywania danych.
-
Dostosuj za pomocą tytułu, opcji, kolorów (niebieski, zielony, szary), rozmiaru strony i tekstu "Więcej opcji", aby wyświetlić więcej opcji.
-
Po wybraniu pozycji lista znika, a wyświetlana jest wybrana odpowiedź.
-
Idealne zarówno dla krótkich, jak i długich list, zapobiegające problemom z przewijaniem konsoli.
-
Działa z dowolnym typem danych (ciągi znaków, liczby, owoce, takie jak jabłko, banan, pomarańcza, lub obiekty niestandardowe).
- W kolejnych filmach Tim omówi monity z wielokrotnym wyborem, w których użytkownicy mogą przełączać się między wieloma opcjami, a następnie nacisnąć klawisz Enter, aby potwierdzić.
