FANDOM


DefinicjaEdytuj

Warunek - wyrażenie zwracające zawsze wartość logiczną TRUE (prawda) lub FALSE (fałsz). Używa się go w instrukcjach warunkowych (np. if, while, do) W pierwszym przypadku zostaną wykonane instrukcje należące do bloku instrukcji, w drugim zostaną pominięte i wykona się dalsza część programu.


Zmienna w warunkuEdytuj

Możemy podać do warunku samą zmienną lub stałą, pod warunkiem, że jest typu bool.

bool i = true;
if(i)
 message("Prawda!", DisplayInfo);
else
 message("Fałsz!", DisplayError);

Powyższy kod działa, ponieważ wyrażenie podane jako warunek zwraca wartość logiczną.

Funkcja w warunkuEdytuj

Jeśli funkcja zwraca wartość typu bool, to można ją wpisać do warunku. Zwróć tylko uwagę, że funkcja, aby coś zwrócić, musi się wykonać. Dzięki temu możemy bez problemu kontrolować poprawność wykonania własnoręcznie napisanych funkcji i odpowiednio zareagować.

// kod funkcji sprawdzajacej czy istnieje na mapie obiekt WayPoint
// ============================
bool f() // 1
{
move(5)
object item = radar(WayPoint);
if(item == null)
 return false;
else
 return true;
}
// ============================

// glowny kod
// ============================
if(f()) // 2
 message("Obiekt istnieje!");
else
 message("Obiekt nie istnieje!");
// ============================

// dalsza czesc programu


Analiza dla początkujących:

  1. Powyższy kod jest wbrew pozorom bardzo prosty. Najpierw piszemy prostą funkcję zwracającą wartość logiczną. Ma ona za zadanie sprawdzić, czy na mapie istnieje obiekt WayPoint. Jeśli tak, funkcja zwróci wartość TRUE (prawda), jeśli nie FALSE (fałsz). Instrukcja move(5); na początku bloku funkcji ma ci uświadomić, że podanie funkcji w warunku sprawi, że się ona wykona...
  2. Najważniejsza linijka. W wyrażeniu warunkowym jest podana funkcja. Wykona się ona (i m.in. robot  poruszy się do przodu o 5 metrów) i, jako że jest jedynym elementem tego wyrażenia, sprawi, że albo blok instrukcji if się wykona albo nie, w zależności od wartości zwróconej przez funkcję f.

Pamiętaj więc o tym, aby uniknąć pomyłek. Jeśli chcesz wywołać funkcję raz, a dopiero potem sprawdzić, że akurat wtedy się poprawnie wywołała po prostu przekaż jej wynik do zmiennej.

bool did_f_work = f(); // 1
// ...

if(did_f_work) // 2
 message("Funkcja wykonana poprawnie.");

else
 message("Funkcja wykonana niepoprawnie.");

// ...
// kilka instrukcji
// ...

if(!(did_f_work)) // 3
// funkcja sie nie wykonala poprawnie, program nie moze dalej dzialac, wiec go chamsko wylaczamy :)
return;

// funkcja sie wykonala poprawnie, wiec program moze sie dalej wykonywac

Analiza dla początkujących:

  1. Inicjalizacja zmiennej did_f_work wynikiem działania funkcji f.
  2. Powiadamiamy gracza, czy funkcja się wykonała poprawnie, po czym chcemy wykonać kilka instrukcji. Na razie wynik działania funkcji nie jest potrzebny programowi, te instrukcje mają się tak, czy tak wykonać.
  3. Dopiero teraz sprawdzamy, czy funkcja f się wykonała, bo ta informacja jest nam potrzebna w dalszej części programu. Został tutaj użyty operator negacji, dokładny opis jego działania znajdziesz na stronie o operatorach.

Takie sytuacje rzadko się zdarzają, ale warto wiedzieć jak sobie z nimi poradzić.

Operatory, funkcje i wyrażenia w warunkuEdytuj

Najczęściej w warunkach się używa operatorów porównania, jako że wynikiem ich działania jest wartość logiczna. Możemy jednak używać także pozostałych operatorów, a nawet skomplikowanych wyrażeń, takich jak np. to:

int i = 1;
bool its_true = false;
object item = null;

if((!(its_true) == f()) && ((i+2) > 0) || (!((item = radar(WayPoint)) != null))) // skomplikowany warunek
 message("Powodzenie!");
else
 message("Niepowodzenie!");

Analiza:

Jak widać, ten warunek jest dosyć skomplikowany. Użyliśmy tu prawie wszystkiego: negacji, zmiennej logicznej, operatorów porównania, funkcji, koniunkcji, operacji arytmetycznej, alternatywy, trzy różne zmienne i w dodatku operację przypisania! Ten przykład powinien w zupełności wystarczyć na pokazanie tego, co można wstawić w warunku.

Uwaga: Pamiętaj, że jeśli wyrażenie z lewej strony alternatywy będzie miało wartość true, to prawa strona już nie jest obliczana.

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki