C++ Academy · Oppitunti

Haarautuminen: if-else, ternary, switch-case

Valitse selkeään haarautumiseen if-else-ketjujen, ternary-lausekkeiden ja switch-lauseiden välillä.

Oppitunti 1/413 vaihetta

Haarautuminen: if-else, ternary, switch-case on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

if-lause

Perustason ehtolause. Runko suoritetaan, kun ehto on tosi. Aaltosulkeet ovat valinnaiset yhden lauseen yhteydessä, mutta niiden käyttöä suositellaan aina.

int score = 85;
if (score >= 60) {
    std::cout << "Pass\n";
}

if-else-ketjut

Testatkaa vaihtoehtoja else if-lauseilla ja lopullisella else-haaralla. Ensimmäinen tosi haara suoritetaan.

if (score >= 90) std::cout << "A";
else if (score >= 80) std::cout << "B";
else if (score >= 70) std::cout << "C";
else std::cout << "F";

Boolean-ehdot

Kaikki lausekkeet, jotka voidaan muuntaa tyypiksi bool, toimivat. Osoittimet tulkitaan epätosiksi, kun ne ovat null-arvoja, ja kokonaisluvut epätosiksi, kun ne ovat nollia. Käyttäkää ilmaisua selkeyden vuoksi.

Muuttujan alustaminen if-lauseessa (C++17)

C++17:n ansiosta voitte esitellä muuttujan if-lauseen sisällä. Muuttujan näkyvyysalue rajoittuu if-else-lauseen runkoon.

if (auto it = map.find(key); it != map.end()) {
    std::cout << it->second;
}

Ternäärioperaattori

condition ? a : b palauttaa toisen kahdesta arvosta. Se sopii erinomaisesti yksinkertaisiin valintoihin, mutta huonosti sisäkkäiseen logiikkaan.

int max = (a > b) ? a : b;
std::string msg = (n == 1) ? "item" : "items";

Välttäkää sisäkkäisiä ternäärioperaattoreita

Sisäkkäisiä ternäärioperaattoreita on vaikea lukea. Käyttäkää sen sijaan if-else-rakennetta tai eriyttäkää logiikka apufunktioon.

// 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";

switch-lause

Verratkaa yhtä arvoa useisiin vakioihin. Jokainen haara tarvitsee komennon break, jotta suoritus ei siirry seuraavaan case-haaraan.

switch (day) {
    case 1: std::cout << "Mon"; break;
    case 2: std::cout << "Tue"; break;
    default: std::cout << "?";  break;
}

Tarkoituksellinen läpivienti

Ryhmitelkää useita case-haaroja, jotka käyttävät samaa koodia. C++17 lisäsi merkinnän [[fallthrough]] kääntäjää varten.

switch (c) {
    case 'a': case 'e': case 'i': case 'o': case 'u':
        std::cout << "vowel"; break;
    default:
        std::cout << "consonant";
}

switch-lauseen rajoitukset

switch toimii vain kokonaisluku- ja enum-tyypeillä. Käyttäkää merkkijonoille if-else-rakennetta tai hajautustaulua.

Muuttujan alustus switch-lauseessa (C++17)

if-lauseen tapaan voitte esitellä muuttujan switch-otsakkeessa.

switch (auto value = compute(); value) {
    case 0: ...
    default: ...
}

Malli: hakutaulu

Merkkijonoavaimia käyttävissä haaroissa std::unordered_map voi olla selkeämpi kuin if-else-ketju.

std::unordered_map<std::string, std::function<void()>> commands = {
    {"start", []{ start(); }},
    {"stop",  []{ stop();  }}
};
if (auto it = commands.find(cmd); it != commands.end())
    it->second();

Pikakysymys

Mitä tapahtuu, jos switch-lauseen case-haarasta puuttuu break ja seuraava case-haara ei ole tyhjä?

Kertaus

Käyttäkää if-else-rakennetta yleiseen haarautumiseen, ternäärioperaattoria lyhyisiin arvojen valintoihin ja switch-lausetta, kun yhtä arvoa verrataan useisiin kokonaislukuvakioihin. C++17:n alustuslausekkeet selkeyttävät näkyvyysalueita.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Haarautuminen: if-else, ternary, switch-case” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Haarautuminen: if-else, ternary, switch-case”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Haarautuminen: if-else, ternary, switch-case”?

Valitse selkeään haarautumiseen if-else-ketjujen, ternary-lausekkeiden ja switch-lauseiden välillä. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Haarautuminen: if-else, ternary, switch-case”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Haarautuminen: if-else, ternary, switch-case
  2. Silmukkamallit: for, while, do-while
  3. Konttien käsittely range-pohjaisella for-silmukalla
  4. Varhaiset palautukset, break, continue ja goto
← Takaisin: C++ Academy