fbpx ...

Podstawy C++: instrukcja warunkowa if, czyli jak ugotować pomidorową?

Jeśli zaczynasz naukę programowania w C++, to jednym z ważnych elementów, które musisz poznać, jest instrukcja warunkowa if. Pozwala one na wykonanie różnych akcji w zależności od spełnienia określonych warunków. W tym artykule przyjrzymy się bliżej rodzajom instrukcji warunkowej w C++ i ich zastosowaniu na przykładzie historii o… robieniu zupy pomidorowej. Jesteś akurat przed obiadem? No to zaczynamy!

Zanim przystąpimy do gotowania zupy pomidorowej, musimy sprawdzić, czy mamy wszystkie składniki. Najważniejsze są oczywiście pomidory, dlatego trzeba zerknąć do spiżarki, czy je mamy. Możemy to zrobić za pomocą zmiennej logicznej hasTomatoes, którą ustawimy na wartość true, jeśli posiadamy pomidory lub false, jeśli ich nie posiadamy.

  bool hasTomatoes = true;  

Następnie sprawdźmy, czy mamy również cebulę i czosnek:

  bool hasOnion = true;
bool hasGarlic = false;  

Zanim pójdziemy kupić czosnek, sprawdźmy, czy mamy bulion. Ten składnik jest akurat opcjonalny, zamiast niego możemy użyć wody, ale wtedy zupa nie będzie taka dobra. Do tego jeszcze wrócimy.

  bool hasBroth = true;

  

Czosnek kupiony? W takim razie możemy przejść do omówienia instrukcji warunkowej w C++.

Instrukcja warunkowa if, czyli gotujemy pomidorową

Tak wygląda konstrukcja instrukcji warunkowej if:

  if (we_have_all_ingredients) {
   // we can cook
}  

Jeśli we have all ingredients – mamy wszystkie składniki, to nasz warunek został spełniony, wtedy możemy wykonać planowane działanie, czyli we can cook – możemy gotować.

Ważne: nigdy nie zapominaj o klamerkach {}! Jeśli o nich zapomnisz, to wykona się tylko pierwsza instrukcja. Zerknij tutaj

Sprawdźmy jednak, czy NA PEWNO mamy wszystkie składniki. Pomoże nam w tym operator logiczny i (&&, and):

  if (hasTomatoes && hasOnion && hasGarlic)

  

W przypadku użycia operatora && wszystkie trzy powyższe warunki muszą zostać spełnione, inaczej kod wewnątrz instrukcji się nie wykona, czyli nici z naszej pomidorowej.

Brakuje nam jeszcze płynu, czyli bulionu, albo wody. W tym przypadku możemy skorzystać z operatora logicznego lub (||, or):

  if (hasBroth || hasWater)  

Tutaj wystarczy, że przynajmniej jeden z dwóch warunków będzie spełniony, aby kod wewnątrz instrukcji warunkowej się wykonał. Oczywiście zupa na bulionie byłaby lepsza, ale nie jest to warunek konieczny.

Operatory && i || można ze sobą łączyć wewnątrz jednej instrukcji, dlatego nasz przepis na pomidorową można podsumować w ten sposób:

  if (hasTomatoes && hasOnion && hasGarlic && (hasBroth || hasWater))  

Instrukcja warunkowa if else, czyli co zrobić, kiedy mamy za mało pomidorów?

Bywa i tak, że któryś warunek się nie spełni, albo przynajmniej nie do końca tak, jakbyśmy sobie tego życzyli. Co wtedy? Możemy skorzystać z instrukcji warunkowej if else i wymusić na programie inne zachowanie.

  if (tomatoCount <= 1) {
  // not enough tomatoes
} else if (tomatoCount == 2) {
  // small portion of tomato soup
} else {
  // big portion of tomato soup
}  

Jeśli mamy tylko jednego pomidora, to nie warto nawet brać się za gotowanie. Jeśli mamy dwa, to możemy spróbować, ale wyjdzie z tego mała zupa na raz. Natomiast, jeśli mamy więcej, to wtedy wyjdzie duża porcja zupy i będziemy mogli zostawić sobie trochę na później, albo kogoś poczęstować.

Możemy tworzyć wiele drabinek if else, które będą sprawdzały kolejne warunki. Trzeba jednak pamiętać, że kod wykona się tylko dla pierwszego prawdziwego warunku.

Instrukcja warunkowa switch/case, czyli jednak ogórkowa

Istnieje jeszcze jeden typ instrukcji warunkowej, w której możemy sprawdzić konkretny przypadek. Wyobraź sobie, że zgłębiliśmy zawartość naszej spiżarki i zamiast pomidorów znaleźliśmy ogórki. Co wtedy?

  switch (ingredient) {
case Ingredient::Tomatoes:
  prepareTomatoSoup();
  break;
case Ingredient::Cucumbers:
  prepareCucumberSoup();
  break;
case Ingredient::Cauliflower:
  prepareCauliflowerSoup();
  break;
default:
  // do nothing
}  

Jeśli nasz główny składnik to ogórki, a nie pomidory, to kod nie wykona pierwszej instrukcji. Przejdzie za to do kolejnej i zdecyduje, że robimy zupę ogórkową, a następnie wykona break, czyli wyjdzie z instrukcji warunkowej. Gdyby nie było break, to kod przeszedłby do instrukcji z kolejnego case i zrobiłby także zupę kalafiorową bez sprawdzania, czy w ogóle mamy kalafior! Jeśli natomiast żaden warunek nie zostałby spełniony, to program dotrze do default, co w tym przypadku oznacza do nothing – nic nie robimy, bo nie mamy z czego.

Uwaga – zmienna sterująca instrukcją switch/case musi być typu liczbowego całkowitego, czyli np. int, char, long etc. Może być także typu wyliczeniowego enum, który także jest widziany przez program jako liczba całkowita. W naszym przypadku ingredient było właśnie takim enumem.

A co na drugie?

Jak widzisz, instrukcja warunkowa w C++ jest bardzo przydatna, gdy chcemy kontrolować, jakie akcje są wykonywane w zależności od określonych warunków.

Teraz kiedy już znasz instrukcję warunkową, masz podstawę do wykonywania bardziej skomplikowanych zadań programistycznych. Dzięki instrukcjom warunkowym możesz m.in.:

  • sprawdzać warunki logiczne
  • wykonywać różne działania w zależności od warunków
  • obsługiwać błędy
  • wykonywać iteracje w pętlach

I wiele, wiele innych rzeczy, dlatego musisz je znać, bo to podstawowy element języka C++.

Jeśli chcesz poznać inne podstawowe zagadnienia, obczaj nasz kurs Podstawy C++.

Smacznego!

ninjaletter

A może Ninjaletter?

Chcesz wiedzieć, co słychać w C++ i nie tylko? Zapisz się na Ninjaletter i otrzymuj od nas co miesiąc dawkę wartościowych treści o C++ i zadania rekrutacyjne. Do tego dorzucamy darmowe materiały, spoilery o nowych kursach, specjalne promocje dla ninjaletterowiczów i wiele, wiele innych. To co, skusisz się?

Łukasz Ziobroń

Łukasz Ziobroń

Zmieniam ludzi w prawdziwych programistów. W nauczaniu stosuję grywalizację, andragogikę i neurodydaktykę.

Najnowsze artykuły

docker

Narzędzia programisty: Docker w skrócie

Co wspólnego ze sobą mają ogry, cebula i Docker? Poznaj podstawy Dockera i dowiedz się, jak może przyspieszyć Twoją codzienną pracę. Odkryj, dlaczego warto go mieć w swoim arsenale programisty.

Czytaj »
good programming practices

Good programming practices – Coding Dojo

Training in a form of Coding Dojo. Participants start with a code review of a small application. They note down their comments. After that, the trainer presents bad and good programming practices. Participants discuss what can be applied in a reviewed code and start fixing it in a form of Coding Dojo.

Czytaj »

Popular C++ Idioms – Coding Dojo

The training starts with a code review of a small application (pre-work). Participants note their thought and discuss their findings in groups. Then popular C++ idioms are presented (the concept and some code) – about 15-20 minutes each. After that participants need to use some of the idioms in a reviewed application code.

Czytaj »
performance optimisations

Performance optimisations

This training is about writing more robust C++ code and algorithms with the help of CPU caches and a compiler. Benchmarking tools are used to show performance gains.

Czytaj »
ninjaletter

Już uciekasz?

Zanim to zrobisz, zapisz się na Ninjaletter, aby wiedzieć, co piszczy w C++. 

Informujemy, iż w celu realizacji usług dostępnych w naszym serwisie, optymalizacji jej treści, dostosowania strony do Państwa indywidualnych potrzeb oraz wyświetlania, personalizacji i mierzenia skuteczności reklam w ramach zewnętrznych sieci reklamowych korzystamy z informacji zapisanych za pomocą plików cookies na urządzeniach końcowych użytkowników. Pliki cookies można kontrolować za pomocą ustawień swojej przeglądarki internetowej. Dalsze korzystanie z naszego serwisu, bez zmiany ustawień przeglądarki internetowej oznacza, iż użytkownik akceptuje stosowanie plików cookies. Więcej informacji zawartych jest w polityce prywatności serwisu.