Jak wygląda zmienna w programowaniu, każdy widzi. Jednak mam pewien powód, dla którego muszę rozebrać temat na czynniki pierwsze i zrobić z prostego terminu cały artykuł. Wchodź 🚪!
ZMIENNA JEST NIBY ZNANA, A JEDNAK MOŻNA SIĘ O NIEJ DOWIEDZIEĆ WIĘCEJ
Temat tyczy się programowania ogólnie, więc ponownie pochylimy się w stronę języka C, "ojca" wszystkich języków wysokiego poziomu. Na początku wyjaśnijmy sobie definicję, bo nie każdy może ją znać, mimo tego że wie jak zadeklarować i zdefiniować zmienną w kodzie:
Zmienna to zarezerwowane miejsce w pamięci identyfikowane przy pomocy nazwy (etykiety), które przeznaczone jest do przechowywania wartości danego typu.
Dodam, że posiada swój synonim, który już nie jest tak powszechnie stosowany podczas pogawędek o programowaniu. Możesz spotkać się z pojęciem "modyfikowalna L-wartość" (ang. modifiable L-value). L-wartość pisząc prostymi słowy, to wartość znajdująca się po lewej stronie operatora przypisania (to mogą być też skrócone operatory takie jak +=, jednak ich rozwinięcie sprowadza się do operatora przypisania). Zastanów się, czy kiedykolwiek umieszczałeś(-aś) dowolną stałą wartość (np. liczbę 5) po lewej stronie operatora przypisania (=) 🤔? Pewnie, że nie 😄! Po lewej stronie wprowadza się tylko zmienne, czyli wartości modyfikowalne. Dlatego określa się je "L-wartościami" ✅.
Stałe (albo inne zmienne), które stanowią składnik operacji, umieszcza się zawsze po prawej stronie operatora przypisania, stąd nazywane są "R-wartościami" ℹ️. Zatem, budując instrukcję przypisywania wartości do zmiennej, po lewej stronie podajesz zawsze etykietę (jej nazwę), a po prawej stronie stałą lub inną zmienną. Zmienna też może być "R-wartością", jednak wtedy nie jest ona modyfikowalna (wartość jest tylko odczytywana), dlatego wartością modyfikowalną określa się jedynie L-wartość 🙃.
Wyjaśnię jeszcze różnicę pomiędzy zmienną globalną, a lokalną. Zmienna globalna oznacza możliwość odwołania się do niej z każdego miejsca czyt. pliku źródłowego. Można to różnie interpretować w zależności od paradygmatu i możliwości języka programowania, jednak w przypadku C/C++, masz możliwość powołania się na nią w każdym pliku źródłowym i definiuje się ją poza jakimkolwiek blokiem funkcji bądź instrukcji warunkowej. Jeżeli zdefiniujesz zmienną wewnątrz takiego bloku, to to już jest zmienna lokalna - to oznacza, że ona istnieje dla kompilatora wyłącznie wewnątrz tego bloku! Każda próba powołania się na taką zmienną poza ten blok, zakończy się błędem kompilacji. Parametr funkcji to też zmienna lokalna, tylko znajdująca się w nagłówku funkcji.
KOD ŹRÓDŁOWY
Na finał, zaprezentuję szybko jak zmienna wygląda w kodzie. Język C oczywiście i podajemy przykład:
int i = 6;
Zasady zapisu są zależne od używanego języka programowania i jest ich naprawdę sporo, dlatego nie sugeruj się powyższą instrukcją, że taka zadziała wszędzie. Są języki, które znoszą obowiązek definiowania typu w zamian za słowo kluczowe (np. JavaScript), a niektórym wystarczy jedynie sama nazwa i wartość (np. Python).
To jest przykład definicji zmiennej całkowitoliczbowej ("int" to skrót od "integer"). Jak pisałem na wstępie, zmienna posiada swoją nazwę (etykietę "i"), przechowuje jakąś wartość (6) i jest ona określonego typu danych ("int"). Mamy wszystko. Możemy odstąpić od przypisywania jakiejkolwiek wartości:
int i;
tym samym kończąc na deklaracji zmiennej. Kiedy chcemy zmodyfikować wartość, to jednym ze sposobów jest instrukcja przypisania, która najczęściej wygląda tak:
i = 19;
Teraz widać doskonale. Po lewej stronie mamy L-wartość, czyli naszą zmienną, która podlega modyfikacjom wartości, a po prawej stronie mamy stałą liczbę 19 👍. Odwrotnie się nie da! W jaki sposób chciał(a)byś modyfikować liczbę 19 😁? Możemy za to sprawić, żeby zmienna była R-wartością! Gdybyśmy mieli hipotetycznie drugą liczbę całkowitą:
int j = 16;
to wówczas możemy przypisać zmiennej "i" wartość zmiennej "j":
i = j;
i teraz jedna zmienna jest L-wartością, a druga zmienna jest R-wartością. Można? Można 😂!
"The end" 😊. Kto by pomyślał, że pojęcie "zmienna" kryje w sobie jeszcze jakieś tajemnice, co nie 😅?