Było o inkrementacji, to teraz druga strona medalu. Odejmowanie w skróconej formie czyli dekrementacja. Wchodź i dowiaduj się więcej, bo to Ci się bardzo przyda podczas pisania!
Tweet |
DEKREMENTACJA ROBI TO SAMO, TYLKO W DRUGĄ STRONĘ...
Znaczenie terminu "decrement" brzmi bardzo podobnie co inkrementacja, przyjacielu: zmniejsz wartość liczbową zmiennej dokładnie o jeden do dołu. Nic więcej! W kodzie źródłowym używamy dwóch minusów przed albo po nazwie zmiennej (bez odstępu). Nie muszę pisać, że wolno Wam to umieścić wyłącznie dla zmiennych reprezentujących "integer" w jakiejkolwiek formie ("unsigned", "long" itd.). Oto kod w języku C, jak to w artykułach o ogólnych zagadnieniach dotyczących programowania:
int i = 2;
i--;
printf("%d\n", i);
--i;
printf("%d\n", i);
Dekrementacja do tego się sprowadza. Wstaw dwa minusy przed zmienną w postaci liczby całkowitej, a wartość zostanie obniżona dokładnie o jeden, co sprawi że na wyjściu zobaczymy nic innego jak liczby 1 i 0 (zero). To jest to samo, co te dłuższe instrukcje:
i = i - 1;
i -= 1;
tylko mniej piszesz ;)!
NIE WSTAWIAJ MINUSÓW WEDŁUG SWOJEGO WIDZIMISIĘ
Powtórzę się w sprawie wstawiania znaczków. Sama dekrementacja, jeżeli obchodzi się bez żadnego mieszania innych fragmentów w jednej instrukcji, nie ma znaczenia czy jest "post", czy "pre". ALE! Spróbujcie wstawić minusy (najpierw przed nazwą, a potem po nazwie) dla tych przykładowych instrukcji:
while (i--)
{
// instrukcje
}
oraz tej:
printf("%d\n", i--);
i gwarantuję Wam, że to "założy togę" z napisem "game changer"! Kombinacje odczytu z dekrementacją mogą dać różne wyniki w zależności od tego, czy będzie to predekrementacja (dwa minusy przed nazwą), czy postdekrementacja (dwa minusy za nazwą). Dla pętli "while" sprawi to jedną iterację różnicy, a dla "printf" wyświetlenie wartości nietkniętej lub "obciętej" o jedną jednostkę. Także miarkuj się kolego w jaki sposób dekrementujesz liczby całkowite! Ciekawy skąd się to bierze?
W języku C występuje termin "punkt sekwencyjny", który oznacza moment zakończenia wszystkich modyfikacji zmiennych (skutków ubocznych). Jest on bardzo "czuły" na miksy instrukcji odczytujących wartości z jej modyfikacją. Kiedy on "zobaczy" postdekrementację, to NAJPIERW użyje wartości aktualnej, a POTEM modyfikuje. Przy predekrementacji jest dokładnie odwrotnie (NAJPIERW edycja, POTEM odczyt).
Kiedy tylko mogę, używam wyłącznie predekrementacji z powodu różnego zachowania się procesora w obu sytuacjach. Zapraszam do odrębnego artykułu o preinkrementacji i postinkrementacji co się wtedy dzieje w pececie za naszymi plecami.
Wszystko na ten temat! Dekrementacja powinna być jak najczęściej używana, a uwierzcie mi że przy odpowiednim wstawieniu minusików, możemy skutecznie skrócić liczbę linijek kodu!