Jason. Cała informatyka w jednym miejscu!

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 😎!

PODOBNE ARTYKUŁY