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 ✒️!
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 Ci to wstawić wyłącznie obok zmiennych reprezentujących "integer" w jakiejkolwiek formie ("unsigned", "long" itd.). Oto kod w języku C, jak to ma zwyczaj w moich artykułach o ogólnych zagadnieniach z 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óbuj wstawić minusy (najpierw przed nazwą, a potem po nazwie) dla tych przykładowych instrukcji - tej:
while (i--)
{
// instrukcje
}
oraz tej:
printf("%d\n", i--);
i gwarantuję Ci, ż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/koleżanko w jaki sposób dekrementujesz liczby całkowite 😳! Ciekawy(-a) skąd się to bierze 🧐?
W języku C występuje termin "punkt sekwencyjny" ⚪, który oznacza moment zakończenia wszystkich modyfikacji zmiennych (tzw. "skutków ubocznych") ℹ️. Jest on bardzo "czuły" na miksy instrukcji odczytujących wartości z jej modyfikacją. Gdy "zobaczy" postdekrementację, to NAJPIERW użyje wartości aktualnej, a POTEM zmodyfikuje. 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 przy odpowiednim wstawieniu minusików, możesz skutecznie skrócić liczbę linijek kodu 😎!