Stałe - do czego są mi potrzebne

Witam.

Pytanie jak w temacie, często w przeróżnych tutorialach (o C++, bo akurat nim się bawię ale to ma pewnie zastosowanie w każdym innym języku) ich autorzy w przykładach programów używają stałych np.

const int ILOSC = 5;

zamiast napisać samą ‘piątkę’ tam gdzie chcemy ją umieścić, dajmy na to w tablicy.

Na przykładzie: masz tablicę 5 elementów i dalej w programie musisz kilka razy po niej iterować. Nagle chcesz zmienić rozmiar tablicy na 4 elementy - musisz to też zrobić w warunkach tych kilku pętel. Zapomnisz o jednym i już cały program działa nie tak, jak trzeba :wink:

Stałe są po to, by nie trzeba było pamiętać, ile tablica ma elementów, jaki ciąg znaków odpowiada czemuś(vide Java) czy jakichś magicznych wartości. Ułatwia to jakiekolwiek zmiany(np. przytoczony przeze mnie przykład z tablicą) i stałe(czy w ogóle identyfikatory) są refactor-friendly(da się jednoznacznie wyszukać je w kodzie i np. zamienić, czego nie da się zrobić z np. liczbą).

const float PI=3.14;

Masz dobry przykład. Zamiast pisać 3.14 napiszesz PI.

Ważne do pokreślenia jest to że jeśli napiszesz tak:

const int ILOSC = 5;

to później nie możesz już tej stałej zmienić, czyli nie możesz w dalszej części programu przypisać innej wartości:

ILOSC=10;

Traktuje się je podobnie jak zmienne (tzn w podobny sposób, bez babrania się z prekompilatorem), tyle że mają wartość znaną w momencie kompilacji. W połączeniu z funkcjami const mogą posłużyć do skrócenia czasu wykonywania kodu kosztem czasu kompilacji - obliczenia tych funkcji wykona w momencie kompilacji, nie wykonania (o ile to możliwe).

Jest to więc głownie informacja dla kompilatora, że to stała wartość i wszędzie ma ją wkleić w momencie kompilacji. Innego sensu stałe nie mają - chyba że ktoś na chama chce zablokować możliwość zmiany wartości.

W skrajnych wypadkach kompilator sam oznacza pewne zmienne jako stałe i odwala całą robotę w czasie kompilacji :slight_smile:

http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c

Czasami napisanie w kodzie ILOSC jest bardziej wymowne dla programisty niż 5. Nie trzeba się zastanawiać skąd dana wartość się wzięła i co oznacza.

Ponadto stałe mogą być możliwością do optymalizacji oraz http://en.wikipedia.org/wiki/Magic_numb … _constants - czyli nazwa mówi więcej niż wartość.