Rozgałęzienia: if-else, ternary, switch-case
Wybieraj między łańcuchami if-else, wyrażeniami ternary i instrukcjami switch, aby tworzyć czytelne rozgałęzienia
Rozgałęzienia: if-else, ternary, switch-case to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Instrukcja if
Podstawowa instrukcja warunkowa. Jej ciało wykonuje się, gdy warunek jest prawdziwy. Nawiasy klamrowe są opcjonalne w przypadku pojedynczej instrukcji, ale zawsze zalecane.
int score = 85;
if (score >= 60) {
std::cout << "Pass\n";
}Łańcuchy if-else
Alternatywy należy sprawdzać za pomocą else if i końcowego else. Wykonywana jest pierwsza gałąź, dla której warunek jest prawdziwy.
if (score >= 90) std::cout << "A";
else if (score >= 80) std::cout << "B";
else if (score >= 70) std::cout << "C";
else std::cout << "F";Warunki logiczne
Dowolne wyrażenie, które można przekształcić na bool, będzie działać. Wskaźniki mają wartość false, gdy są równe null, a liczby całkowite — gdy są równe zero. Dla większej czytelności należy stosować zapis jawny.
Inicjalizacja w if (C++17)
C++17 pozwala zadeklarować zmienną wewnątrz instrukcji if. Zmienna ma zasięg obejmujący ciało instrukcji if-else.
if (auto it = map.find(key); it != map.end()) {
std::cout << it->second;
}Operator trójargumentowy
condition ? a : b zwraca jedną z dwóch wartości. Doskonale nadaje się do prostych wyborów, ale bardzo źle sprawdza się w przypadku zagnieżdżonej logiki.
int max = (a > b) ? a : b;
std::string msg = (n == 1) ? "item" : "items";Zagnieżdżone operatory trójargumentowe: należy ich unikać
Zagnieżdżone operatory trójargumentowe są trudne do odczytania. Zamiast nich należy użyć if-else lub przenieść logikę do funkcji pomocniczej.
// Hard to read
auto label = (n < 0) ? "neg" : (n == 0) ? "zero" : "pos";
// Clearer
std::string label;
if (n < 0) label = "neg";
else if (n == 0) label = "zero";
else label = "pos";Instrukcja switch
Pozwala porównać jedną wartość z kilkoma stałymi. Każda gałąź wymaga break, aby uniknąć przejścia do następnego przypadku.
switch (day) {
case 1: std::cout << "Mon"; break;
case 2: std::cout << "Tue"; break;
default: std::cout << "?"; break;
}Celowe przejście do następnego przypadku
Należy grupować wiele przypadków, które współdzielą kod. C++17 wprowadził [[fallthrough]] jako oznaczenie dla kompilatora.
switch (c) {
case 'a': case 'e': case 'i': case 'o': case 'u':
std::cout << "vowel"; break;
default:
std::cout << "consonant";
}Ograniczenia switch
switch działa tylko z typami całkowitymi i wyliczeniowymi. W przypadku napisów należy użyć if-else lub mapy haszującej.
Inicjalizator w switch (C++17)
Podobnie jak w przypadku if można zadeklarować zmienną w nagłówku instrukcji switch.
switch (auto value = compute(); value) {
case 0: ...
default: ...
}Wzorzec: mapa wyszukiwania
W przypadku gałęzi, których kluczami są napisy, std::unordered_map może być czytelniejsza niż łańcuch if-else.
std::unordered_map<std::string, std::function<void()>> commands = {
{"start", []{ start(); }},
{"stop", []{ stop(); }}
};
if (auto it = commands.find(cmd); it != commands.end())
it->second();Szybkie sprawdzenie
Co się stanie, jeśli w instrukcji switch po case zabraknie break, a następny przypadek nie będzie pusty?
Podsumowanie
Należy używać if-else do ogólnego rozgałęziania, operatora trójargumentowego do krótkich wyborów wartości, a switch do porównywania jednej wartości z wieloma stałymi całkowitymi. Instrukcje inicjalizujące C++17 porządkują zakres zmiennych.
Często zadawane pytania
Czy lekcja „Rozgałęzienia: if-else, ternary, switch-case” jest bezpłatna?
Tak — pełny tekst „Rozgałęzienia: if-else, ternary, switch-case” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Rozgałęzienia: if-else, ternary, switch-case”?
Wybieraj między łańcuchami if-else, wyrażeniami ternary i instrukcjami switch, aby tworzyć czytelne rozgałęzienia Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Rozgałęzienia: if-else, ternary, switch-case”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Rozgałęzienia: if-else, ternary, switch-case
- Schematy pętli: for, while, do-while
- Pętla for oparta na zakresie i kontenery
- Wczesne zwroty, break, continue i goto