Jak zapowiedziałem, teraz podam szczegóły na temat inkrementacji i dekrementacji. Jest to proces zwiększania czy też zmniejszania wartości liczbowej dokładnie o jeden przy czym nie będę truł na temat samej definicji. Bardziej chcę przykuć uwagę odnośnie dwóch sposobów zapisu. Wchodząc w szczegóły jest to preinkrementacja i postinkrementacja. Niby nic, a istnieje bardzo istotna różnica między nimi.

PREINKREMENTACJA TO NIE TYLKO DWA PLUSY Z PRZODU

Na samym początku, poznawszy te dwa zapisy można przypuścić, że nie ma znaczenia jak to się zapisze. Czy da się dwa plusy na początku, czy dwa plusy na końcu, jest szansa, że zobaczymy identyczny wynik. I tutaj STOP wielkimi literami! Przy samej "gołej" instrukcji jedynie inkrementującej liczbę to prawda, aczkolwiek spróbujcie to sobie umieścić w instrukcji warunkowej, w warunku wejścia do pętli lub w wyrażeniu, a mocno możecie się zdziwić obserwując wyniki "podpięte" do konsoli. Preinkrementacja nie polega jedynie na umieszczeniu dwóch plusów na początku aniżeli na końcu. Preinkrementacja to także ustalenie priorytetu dla liczby zwiększonej o jeden!!! Preinkrementacja najpierw podnosi wartość, a potem ta wartość już zmodyfikowana bierze dalszy "udział". Postinkrementacja podnosi licznik, ale dopiero po pewnym czasie. Konkretniej, do osiągnięcia tzw. "punktu sekwencyjnego". Punkt sekwencyjny jest to taki "moment" w działaniu programu kiedy wszystkie modyfikacje wartości zmiennych (a dokładniej "L-wartości") zostały zakończone. Najprościej pisząc, jest to bardzo często utożsamiane ze średnikiem na końcu (aczkolwiek nie jest to jedyny przypadek).

Preinkrementacja i postinkrementacja

Preinkrementacja i postinkrementacja różnią się nie tylko położeniem znaków plusa, ale również priorytetem "podnoszenia" liczby o 1.

INKREMENTACJA OD STRONY CPU

Dwa słowa wyjaśnienia na temat zachowania przez procesor zanim skończę. Większość programistów zaleci Wam, aby dużo częściej jeśli nie zawsze, korzystać z preinkrementacji. Jest w tym pewny powód, a dotyczy on operacji procesora. Stosując postinkrementację procesor musi wpierw utworzyć kopię tej liczby przed inkrementacją w celu zachowania nienaruszonej liczby podczas wykonywania instrukcji przed dotarciem do punktu sekwencyjnego, który omówiłem w poprzednim akapicie. Po jego przekroczeniu, następuje zwiększenie o 1. Natomiast, preinkrementacja to sygnał dla CPU, że trzeba jedynie podnieść ten sam licznik do góry i od razu ma on być uwzględniany jeszcze przed punktem sekwencyjnym.

Właśnie dlatego w warunku pętli ma to kolosalne znaczenie czy dorzucimy plusiki na końcu czy na początku, ponieważ przy postinkrementacji następuje najpierw sprawdzenie warunku czy liczba nie jest większa czy mniejsza i dopiero wtedy jest zwiększenie, a gdy wykorzystywana jest preinkrementacja, pierwszeństwo ma zwiększenie licznika, a dopiero potem jest sprawdzenie warunku. Jest to jedna z najważniejszych różnic do zaobserwowania, ponieważ większość początkujących może z tego korzystać i nie wiedzieć jakie konsekwencje ma użycie drugiego zapisu.


Dziękuję za pełne przeczytanie i mówię serio, weźcie to sobie do serca...

PODOBNE ARTYKUŁY