Podczas pisania dowolnego programu operujemy na różnego rodzaju danych. Trzeba je gdzieś zapisać żeby można było je gdzieś odczytać i wykorzystać, a najprostszym i najczęściej stosowanym miejscem w którym się to robi, są właśnie zmienne.
Zmienne przechowują wartości.
Używamy zmiennych jeśli musimy zapisać jakiś parametr, lub wykonać z nim jakieś operacje.
Zmienna jest jak koperta.
Możemy coś do niej włożyć.
wyplataZaMaj = 1000;
… coś dodać
wyplataZaMaj = wyplataZaMaj + 200;
…coś wyjąć
wyplataZaMaj = wyplataZaMaj - 500;
możemy jej zawartość dodać do innej zmiennej
wyplaty = wyplaty + wyplataZaMaj;
Zmienne służące do zapisu danych tylko jednego rodzaju
W części języków programowania (Java, C, Pascal) tworząc zmienną musimy zadecydować jakiego typu wartości może ona przyjmować. Jeśli zadeklarujemy, że zmienna ma przyjmować liczby, wówczas nie będzie możliwe zapisanie w niej niczego innego.
Istnieją też języki, w których zmienna może raz przechowywać liczbę, a innym razem na przykład tekst (PHP, JavaScript, Python, Ruby).
Zmienna z narzuconym typem jest jak pojemnik przeznaczony tylko i wyłącznie na jeden rodzaj produktów.
Jeśli zmienna ma służyć do przetrzymywania np. liczby produktów w cenniku, to warto wymusić, by była ona liczbą całkowitą (integer, w skrócie int)
int liczbaProduktow = 0;
Jeśli w zmiennej chcemy zapisać imię użytkownika, warto ją zdefiniować jako ciąg znaków (string, w skrócie str):
str imieUzytkownika = 'Krystyna';
Narzucony typ zmiennej (w językach gdzie jest to konieczne) wykorzystywany jest do określenia ilości pamięci komputera która musi zostać zarezerwowana dla niej, do kontrolowania poprawności wykonywanych na niej operacji, a także do jej konwersji na inne typy.
Do podstawowych typów zmiennych zaliczamy:
- liczby całkowite (integer, int),
- liczby zmiennoprzecinkowe (single, double, float),
- napisy (string, str),
- data lub znacznik czasu (date, time, DateTime),
- obiekty (object)
W zależności od języka każdy z tych typów często ma swoje podtypy.
Można też tworzyć własne typy.
Uwaga!
Mimo tego, że w niektórych językach programowania w jednej zmiennej możemy zapisać wartości dowolnego typu, to warto dbać o porządek i używać zmiennych „dedykowanych” każdemu parametrowi z osobna. Pozwoli to uniknąć komplikacji przy rozbudowie aplikacji.
Tworzenie zmiennych
Tworzenie zmiennych rozdziela się na dwa etapy:
- Określenie że dany symbol będzie zmienną (tzw. deklaracja zmiennej),
var wyplataZaStyczen;
- Przypisanie zmiennej wartości początkowej (tzw. definicja zmiennej)
wyplataZaStyczen = 2350;
W niektórych językach programowania etap pierwszy jest pomijany, lub oba etapy są wykonywane jednocześnie:
var wyplataZaStyczen = 2350:
Podczas deklaracji zmiennej określa się także jej typ. Oczywiście dotyczy to tylko języków w których zmienne muszą mieć jakiś typ nadany.
Uwaga!
Zawsze, ale to zawsze tworząc zmienne pomyśl czy nie powinno się jej nadać wartości początkowej!
Zmienne nie potrzebują wartości początkowej jeśli w kodzie programu w pierwszej kolejności będzie coś do nich zapisywane (na przykład wynik działania jakiejś funkcji, lub indeks elementów zbioru po którego elementach wykonywana jest pętla). Np.:
userName = getLoggedUser();
for (i = 0; i < Count; i++){
}
W przeciwnym razie, jeśli pierwsze wykorzystanie zmiennej będzie polegało na odczycie jej wartości – wtedy ta wartość jakaś musi być. Np.:
licznik = 0;
licznik = licznik + 1;
W niektórych językach programowania zmienne na starcie przyjmują jakieś wartości domyślne zależne od zadeklarowanego typu, lub wartość „niezdefiniowaną”, ale czasem wskazują na jakąś wartość losową i przy próbie odczytu zwracają jakąś wartość z kosmosu nie ostrzegając o błędzie.
Wyobraź sobie że piszesz aplikację do rozliczania kierowców i sumujesz przejechane przez nich kilometry.
var sumaKilometrow; sumaKilometrow = sumaKilometrow + sumaKilometrowWStyczniu; sumaKilometrow = sumaKilometrow + sumaKilometrowWLutym; sumaKilometrow = sumaKilometrow + sumaKilometrowWMarcu;
Jeśli na początku nie zdefiniujesz wartości początkowej:
var sumaKilometrow = 0;
…wynik jakiś otrzymasz, ale jaki?
Zmienne najczęściej definiujemy za pomocą słówka var (od variable).
var wyplata=0;
W niektórych językach do definiowania / deklaracji zmiennych używa się słowa „define” (lub „def”), „let”, lub nie używa się żadnego słowa specjalnego po prostu pisząc:
wyplata = 150;
Uwaga!
Tworząc zmienną nadaj jej sensowną nazwę. Spotkałem się już kilka razy ze zmiennymi zmienna1, zmienna2 … i tak do zmienna15.
Uwierz… takiego kodu nie da się czytać, a rozbudowywanie go potem to prawdziwa męczarnia.
Wyjątkiem od tej reguły są zmienne służące jako indeksy elementów zbiorów po których wykonujemy pętle. Tu (TYLKO TU) zmienne i, j, k są jak najbardziej ok.
Polecam też stosować angielskie nazwy zmiennych. Łatwiej wtedy nazywa się funkcje (zwłaszcza te które coś ustawiają, lub pobierają).
Zmienna „loggedUser” i funkcja która ją ustawia „setLoggedUser()” znacznie lepiej wygląda niż „zalogowanyUzytkownik” i „setZalogowanyUzytkownik()”, czy „ustawZalogowanegoUzytkownika()”. Znacznie lepiej się też takie zmienne używa.
Zmienne żyją tam gdzie się urodziły
Stworzona zmienna jest dostępna tylko we wskazanym fragmencie programu. Decyzję jaki to fragment (tzw. zasięg zmiennej) musisz podjąć samodzielnie deklarując zmienną w odpowiedni sposób.
Ogólnie można powiedzieć, że zmienne dzielimy na globalne (dostępne wszędzie w aplikacji), lub lokalne (dostępne w bloku kodu w którym zostały zadeklarowane).
Jeśli potrzebujesz zmienną tylko do wewnętrznego wykorzystania w jakiejś funkcji lub module programu, zdefiniuj ją lokalnie, w tej właśnie funkcji / module.
Jeśli potrzebujesz zmienną przetrzymującą wartość niezbędną w wielu miejscach programu np. informacje o pozycji ostatnio wyświetlanego okna, zdefiniuj ją globalnie.
Uwaga!
Nie zaleca się tworzyć zmiennych globalnych do ważnych danych np. informacje o zalogowanym użytkowniku, gdyż może to stanowić pewną lukę bezpieczeństwa (wartość zmiennej globalnej łatwiej podmienić inną wartością).
W każdym języku programowania są lepsze sposoby na zapisywanie danych globalnych.
Powinienem wspomnieć tu jeszcze o zmiennych klasy, które mogą być publiczne, prywatne, lub chronione, ale do tego tematu wrócimy przy omawianiu programowania obiektowego.
Masz pytania lub sugestie? Zapraszam do dyskusji.