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

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 »
C++ toolset

C++ toolset

Covers a lot of ground about C++ related tools: build systems, compilers, debuggers, static and dynamic binary analyzers. It is focused more on discovering useful tools, that can solve many software engineering problems.

Czytaj »

Templates – Advanced techniques

Basic usage of C++ templates may not be enough to utilize opportunities, which were introduced in the latest C++ standards. From C++11 we can use templates with any number of parameters and use a simplified mechanism for SFINAE, which is claimed to be a real C++ wizardry.

Czytaj »
templates – basics

Templates – Basics

Templates are pointed out to be the most difficult part of the C++ language. Difficult, but very useful. They allow writing very generic and universal code. Thanks to them, we can avoid code duplication, but also, make it incomprehensible for beginners. This session allows for gaining the necessary knowledge and good practices on using templates.

Czytaj »
STL algorithms in C++ 17

STL Algorithms in C++ 17

This training focuses on the effective use of C++ documentation to implement applications with the use of STL algorithms. First part is mainly theoretical, but there are many short exercises (in a paper form) to apply knowledge instantly and force participants to think and search for solutions in the documentation. The other part is a group activity – implementation of the cryptographic application with proper STL algorithms instead of raw loops.

Czytaj »
STL containers

STL Containers

This training focuses on the effective use of C++ documentation. Computational complexity issues are mentioned. There are many short exercises to apply knowledge instantly and force participants to think and search for solutions in the documentation.

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.