Programowanie w języku C#

Stałe

  • 2014-11-16 13:45
  • 0 komentarzy
  • 5151 odsłon
  • 6/6

Wstęp


Na początek może trochę teorii. Czym są stałe? Stałe to w pewnym sensie zmienne "okrojone" z możliwości jakiegokolwiek wpływania na ich wartość w trakcie działania programu (muszą być też typem prostym). W czasie kompilowania programu kompilator zastępuje wszystkie stałe występujące w kodzie ich wartością. Czyli na przykład zapis:

const int Stała = 10;
for (int i = 1; i < Stała; i++)


 zostanie skompilowany jak

const int Stała = 10;
for (int i =1; i < 10; i++)


Zaczynamy


Jak łatwo zauważyć w obydwu kodach występuje słowo kluczowe const poprzedzające stworzenie zmiennej (?) typu int. Równie łatwo domyślić się że "zmienna" zmienną już nie jest - const sprawiło że kompilator traktuje ją jako stałą.
Jeśli ktoś nie wierzy - można to łatwo sprawdzić. Spróbujcie dodać następną linijkę kodu, na przykład

Stała = 15;


Kompilator będzie bezlitosny. Dlatego stała już podczas deklarowania musi mieć przypisaną wartość.

Język C# pozwala dodatkowo na przypisanie stałej wartości wyrażenia, lecz musi być ono do obliczenia w czasie kompilacji, na przykład:

const int Pierwsza_stała = 10 + 15;
const int Druga_stała = 20 * 2;
const int Trzecia_stała = Pierwsza_stała + 20;
const int Czwarta_stała = Environment.SystemDirectory;


Ale po co?


Wstęp mamy już za sobą. Stałe jak widać nie są wcale skomplikowane w użyciu. Znacznie trudniejsze jest dobre wykorzystanie w programie. Każdy kto zastanowił się nad dotychczas przeczytaną częścią artykułu, a nie miał dotychczas styczności ze stałymi, z pewnością zastanawia się po co w ogóle ich używać? Przecież (rozumuje) zamiast używać stałej w przykładzie powyżej wystarczy zastąpić ją cyfrą 10 i wszystko będzie działało równie dobrze, a nawet lepiej bo kod będzie krótszy. Czy ma racją? Owszem.

My jednak pamiętajmy że powyższy przykład był tylko przykładem i nijak ma się do zawiłości "prawdziwego" programowania. Używanie stałych niweluje ryzyko że, przy poprawianiu czegoś w programie zapomnimy coś zmienić (i doprowadzimy do efektownego wyjątku...).

Uwagi


- Konwencja nazewnicza (stosowana między innymi w biblitekach FCL od Microsoftu) nakazuje zapisywać nazwy stałych "Pascalem" (pierwsza litera każdego słowa duża, reszta małych).
- Sposób traktowania stałych przez kompilator jest dość interesujący (co zostało opisane na początku) - po prostu wstawia je w każde miejsce gdzie kod się do niej odwołuje. Jest to dobre rozwiązanie jeśli chodzi o wydajność, ale niestety, jeśli zmienimy stałą w jednym zastawie, będziemy musieli przekompilować również wszystkie pozostałe zastawy korzystające z tej stałej (bo inaczej odwołania do niej nie zostaną "uaktualnione"). Dlatego jeśli spodziewamy się że "stała" może ulec zmianie lepszym rozwiązaniem będzie stworzenie pola poprzedzonego słowem kluczowym readonly