Dzien dobry!
Moze mi ktos powiedziec co oznacza taki zapis w C++? Znalazlam taki kod w jednym przykladzie i nie rozumiem tego zapisu:
currentStep = (++currentStep < 4) ? currentStep : 0;
Pozdrawiam!
Dzien dobry!
Moze mi ktos powiedziec co oznacza taki zapis w C++? Znalazlam taki kod w jednym przykladzie i nie rozumiem tego zapisu:
currentStep = (++currentStep < 4) ? currentStep : 0;
Pozdrawiam!
Analizę tego należy rozpocząć do wyrażenia w nawiasie, które zwraca wartość logiczną true
/false
:
++currentStep < 4
w tym przypadku wartość zmiennej currentStep
jest zwiększana przed dokonaniem porównania z wartością 4
.
Następnie po prawej stronie przypisania mamy wyrażenie warunkowe:
warunek ? wartosc_gdy_true : wartosc_gdy_false
(++currentStep < 4) ? currentStep : 0
jeżeli wynikiem ++currentStep < 4
jest wartość true to wynikiem wyrażenia warunkowego jest: currentStep
, w przeciwnym wypadku wartość 0
.
Wartość zwrócona przez wyrazenie warunkowe ostatecznie jest przypisywana do zmiennej currentStep
.
W skrócie:
zmienna currentStep
jest zwiekszana o 1 i jeżeli jest mniejsza od 4 to kopiowana jest do niej wartość aktualna (czyli powiekszona) . Jezeli wartość jest równa lub wieksza od czterech to do zmiennej currentStep
kopiowana jest wartość 0
.
Efektem tego jest to, że wartość zmiennej przechodzi po kolei po wartościach 0
, 1
, 2
, 3
w koło, w pętli.
Analogiczny kod w mniej zwartej formie:
++currentStep; // zwiekszenie zmiennej
if(currentStep >= 4) { // sprawdzenie czy nie wykracza poza zakres 0 .. 3
currentStep = 0; // wyzerowanie wartości jeżeli przekracza
}
I wszystko jasne, dziękuję pięknie :)