Jason. Cała informatyka w jednym miejscu!

Przerobimy sobie dzisiaj kolejne pojęcie dotyczące programowania, które będziesz często widzieć na oczy. Jest nim inkrementacja. Zapraszam głodnych wiedzy adeptów do środka po darmowy zastrzyk informacji, bez zastrzyku 💉😁.

INKREMENTACJA KRYJE SIĘ POD DWOMA PLUSAMI

Termin jaki widzisz (pisany po angielsku "increment"), jest skrótem od znaczenia: zwiększ wartość liczbową zmiennej dokładnie o jeden do góry. To wszystko 😄! Zapis programistyczny sprowadza się do umieszczenia dwóch plusików (➕➕) przed albo po nazwie zmiennej reprezentującej liczbę całkowitą (to jest warunek konieczny!). Kod pisany w języku C:

int i = 0;

i++;

printf("%d\n", i);

++i;

printf("%d\n", i);

Inkrementacja powoduje dosłowne zwiększenie wartości dokładnie o jeden do góry. Na wyjściu ujrzysz liczby: 1 i 2. Jest to bardzo wygodny skrót dla następujących instrukcji dających identyczny rezultat:

i = i + 1;
i += 1;

To jest to samo. Muszę Cię zmartwić, że nie wszystkie dzisiejsze języki programowania posiadają ten skrótowy operator np. Python czy Lua ℹ️.

PATRZ GDZIE WSTAWIASZ PLUSY!

Jest drobny szczegół do opisania odnośnie wstawiania tych plusików. W momencie inkrementowania wartości tak jak wyżej, to nie będzie miało jakiegokolwiek znaczenia dla działania programu. Natomiast wstawienie w pętlę albo w dowolną instrukcję, w której następuje podstawienie ORAZ inkrementacja, już tak 😱! Chodzi mi o dwa charakterystyczne przypadki, ten:

while (i++)
{
	// instrukcje
}

oraz ten:

printf("%d\n", i++);

Tutaj inkrementacja już będzie robiło OGROMNĄ, lecz mało widoczną różnicę w przebiegu działania programu 😳! W tych powyższych przykładach najpierw zostanie odczytana wartość zmiennej, a dopiero wtedy, podnoszona o jeden! Co ciekawe, gdy wtrącimy plusiki za nazwą zmiennej:

while (++i)
{
	// instrukcje
}

printf("%d\n", ++i);

To spowoduje to NAJPIERW zwiększenie, a potem odczytanie wartości!!! Teraz pytanie jaka jest tego puenta. Dwa powyższe przykłady pokazują wrażliwość tzw. "punktów sekwencyjnych" na inkrementację ℹ️. Punkt sekwencyjny to moment, w którym wszystkie skutki uboczne w danej linijce kodu zostały zakończone. Z kolei skutki uboczne to udane modyfikacje zmiennych. Ma to cholernie duże znaczenie kiedy łączysz odwoływanie się do wartości zmiennej ze zwiększeniem. Jeżeli użyjesz niewłaściwej kolejności plusów, to mogą się stać różne cuda wianki. Iteracja w pętli pójdzie o jeden raz za dużo albo wyjdziesz poza zakres tablicy (jeżeli wstawiasz za indeks zmienną).

Obczaj to bracie: dwa plusiki wstawione PO nazwie stanowią operator postinkrementacji. Kiedy umieścisz je PRZED nazwą, wtedy stosujesz preinkrementację. Jasne 🙂?

W swoich kodach źródłowych korzystam wyłącznie z preinkrementacji, tam gdzie się tylko da. Dlaczego? To już zapraszam do odrębnego wpisu na temat działania procesora wobec preinkrementacji i postinkrementacji.


Mój drogi/moja droga, to tyle z dzisiejszego artykułu ❤️! Inkrementacja jest bardzo użyteczną operacją, jednak nawet ona potrafi zaskoczyć w najmniej oczekiwanym momencie 💥!

PODOBNE ARTYKUŁY