Bezpośrednie operowanie liczbami i łańcuchami znaków nie zawsze jest wygodne, szczególnie jeśli dana wartość zmienia się w trakcie działania programu. W takich, a także wielu innych przypadkach z pomocą przychodzą zmienne.
Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz
Czym są zmienne?
Zmienne (ang. variables)możemy sobie wyobrazić jako karteczki z zapisanymi liczbami, tekstami, datami etc. Każda z takich karteczek ma swoją nazwę, tak aby łatwo było się do nich odwoływać. Wyobraźmy sobie, że zapisujemy w ten sposób niektóre dane dotyczące fikcyjnej studentki.
Zauważ, że znajdują się tu różne rodzaje informacji. Są tu liczby (całkowite i zmiennoprzecinkowe), pojedyncze znaki, słowa a także dłuższe teksty. Jeśli używamy rzeczywistych karteczek, nie musimy sobie tym zaprzątać głowy, po prostu piszemy tekst, ale dla komputera, rodzaj zapisanej informacji jest kwestią fundamentalną. Wynika to miedzy innymi z tego, jaką ilość pamięci musi zarezerwować do przechowania danej informacji a także co może z nią zrobić. Na czym innym na przykład polega dodawanie liczb a na czym innym dodawanie tekstów (zob. poprzednia lekcja).
Tworzenie zmiennych
Utwórz nowy projekt w NetBeans IDE, z klasą o nazwie Zmienne
.
W metodzie main
umieść taki kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
String imie = "Róża"; String nazwisko = "Kaktusińska"; String motto; motto = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et dolore " + "magna aliqua."; int kursy1Rok, kursy2Rok, kursy3Rok; kursy1Rok = 11; kursy2Rok = 14; kursy3Rok = 13; int wiek = 22; byte rokStudiow = 3; double sredniaOcen = 4.32; char plec = 'K'; |
Przyjrzyj mu się teraz uważnie i zastanów się co oznaczają poszczególne linie.
Być może domyślasz się, że są tu utworzone różne zmienne o nazwach z grubsza odpowiadających nazwom „karteczek” z rysunku powyżej. Są to np. imie
, motto
, rokStudiow
itd. Zmiennym zostają przypisane pewne wartości, przy czym w niektórych przypadkach dzieje się to od razu (np. nazwisko
, wiek
) a w innych dzieje się to później (np. motto
, kursy1Rok
).
Bardziej tajemnicze mogą wydawać się słowa, występujące przed nazwami zmiennych: String
, int
, byte
, double
, char
. Mówią one o tym, jakiego rodzaju dane może przechowywać zmienna, inaczej rzecz ujmując o określają typ zmiennej.
Każda zmienna, zanim zostanie jej przypisana wartość, musi zostać zadeklarowana. Deklaracja składa się z określenia typu zmiennej i nazwy zmiennej. Na przykład:
Zadeklarowanej zmiennej można przypisać wartość, używając znaku równości =
, np:
Od tej chwili zmienna wiek
będzie miała wartość 22. Pierwsze przypisanie zmiennej, jest jednocześnie inicjacją zmiennej. Nie można użyć zmiennej w kodzie, na przykład spróbować wydrukować jej wartość, zanim się jej nie zainicjuje.
Obie operacje, tj. deklarację i przypisanie wartości można umieścić w jednej linijce kodu:
Deklaracje kilku zmiennych jednego typu można zmieścić w jednej linijce, np:
int kursy1Rok, kursy2Rok, kursy3Rok;
ale przypisujemy im wartości już osobno.
Pamiętaj, że zanim do zmiennej zostanie przypisana wartość, musi ona zostać zadeklarowana. Taki kod będzie błędny:
liczba = 4;
int liczba;
NetBeans natychmiast podkreśli nazwę zmiennej w pierwszej linijce informując nas, że: „_cannot find symbol…_”. Trzeba więc trzymać się żelaznej reguły: Najpierw deklarujemy, później używamy.
Skoro już wiadomo (przynajmniej z grubsza) jak zadeklarować zmienną i przypisać jej wartość, przyjrzyjmy się bliżej rodzajom zmiennych.
Typy zmiennych
Określenie typu zmiennej, której zamierzamy używać z programie, jest sprawą kluczową. Przyjrzyjmy się zatem dostępnym typom zmiennych (danych) i pokrótce przeanalizujmy kiedy jakich z nich używać.
Typy zmiennych można podzielić na dwie podstawowe kategorie:
- typy podstawowe (proste, prymitywne) (ang. primitive types) – obejmujące różne typy liczb, wartości booleanowskie oraz pojedyncze znaki
- typy odnośnikowe (odwołania do obiektów) (ang. reference types) – odnoszące się do bardziej złożonych struktur niż powyższe, takich jak tablice i obiekty. Należy do nich np. typ
String
umożliwiający przechowywanie łańcuchów znaków.
Teraz przyjrzyjmy się bliżej typom podstawowym, na inne w tym łańcuchy znaków przyjdzie czas później.
Typy podstawowe
Typy podstawowe danych i zmiennych obejmują cztery podstawowe kategorie:
- liczby całkowite (całkowitoliczbowe) (ang. integers, integral types) – jak sama nazwa wskazuje dotyczą liczb całkowitych.
- liczby zmiennopozycyjne (zmiennoprzecinkowe) (ang. floating-point) – umożliwiają zapamiętanie liczb ułamkowych.
- znakowy:
char
(ang. characters) – służy do przechowywania pojedynczych znaków. - boolowski:
boolean
(logiczny) (ang. boolean) – pozwala na zachowanie jednej z dwu możliwych wartości:true
(prawda) lubfalse
(fałsz).
Liczby całkowite
W Javie istnieją cztery typy zmiennych przechowujących liczby całkowite. Każdy kolejny z wymienionych umożliwia przechowywanie coraz większych (i coraz mniejszych) liczb ale wymaga też coraz większej ilości pamięci, tu przedstawionych jako liczba bitów:
typ | l. bitów | Zakres liczb |
---|---|---|
byte |
8 | –128 do 127 |
short |
16 | –32 768 do 32 767 |
int |
32 | –2 147 483 648 do 2 147 483 647 |
long |
64 | –9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 |
Liczby zmiennopozycyjne
Dla liczb zmiennopozycyjnych w Javie przewidziano dwa typy:
typ | l. bitów | Zakres liczb |
---|---|---|
float |
8 | –3,4∙1038 do 3,4∙1038 |
double |
16 | –1,8∙10308 do 1,8∙10308 |
Typ znakowy
W zmiennej typu char
można przechowywać pojedyncze znaki określone przez Unicode, czyli zestaw znaków mający obejmować znaki używane we wszystkich pismach na świecie. Każdemu znakowi odpowiada liczba, można więc zamiast pisać: char plec = 'K';
napisać: char plec = 75;
(literze K odpowiada liczba 75). Daje to pewne dodatkowe możliwości, o czym później.
Typ boolowski
Ten typ jest najbardziej ograniczony pod względem zakresu przyjmowanych wartości. Jest ich bowiem aż… dwie: true
(prawda) oraz false
(fałsz), które mogą być interpretowane także jako „tak/nie”, „1/0” itp. Najbardziej oczywistą sytuacją wykorzystania zmiennych tego typu jest zapis stanu związanego z prawdziwością jakiejś sytuacji czy wyrażenia, np: „czy wartość x
jest większa niż 5?”. Można jednak je wykorzystać także w innych przypadkach, w których istnieją dwa możliwe stany, np: noc/dzień, wolny/zajęty, żywy/martwy. Wtedy zwykle sprowadzamy je do wyboru „prawda/fałsz” („tak/nie”), co też uwzględniamy odpowiednio nazywając zmienne, np: noc
, wolny
, zywy
.
Nazwy zmiennych
Na koniec parę słów o nazwach zmiennych. Oto podstawowe zasady, których trzeba się trzymać:
- W Javie nazwy zmiennych mogą składać się z liter, cyfr i znaków
_
oraz$
- Pierwszym znakiem nie może być cyfra.
- Java odróżnia wielkość znaków, więc:
imie
,Imie
orazIMIE
to zupełnie różne nazwy.
Oczywiste jest, że nazwa zmiennej nie może zawierać spacji! Jakkolwiek powyższe zasady pozwalają na takie nazwy jak $liczba
, z1
, moja_ocena
, WAZNAZMIENNA
czy źródło
, warto jednak trzymać się konwencji nazewnictwa przyjętej w Javie oraz zdrowego rozsądku. Zatem poniżej kilka zasad, których warto się trzymać:
- Zaczynaj nazwę od liter. Co prawda kompilator przełknie nazwy typu
$masa
albo_rodzaj
, ale takie nazwy mile widziane w niektórych innych językach programowania, są zdecydowanie źle widziane w Javie. - Jeśli nazwa zmiennej składa się z jednego słowa, używaj wyłącznie małych liter (np.
gatunek
), jeśli składa się z wielu słów, pierwsze zaczyna się z małej litery, następne z wielkiej (np.haploidalnaLiczbaChromosomów
). Pomiędzy poszczególnymi słowami nie wstawiaj dodatkowych znaków. - Używaj nazw „samoobjaśniających” tak, żeby o ile to możliwe sama nazwa wskazywała czego zmienna dotyczy. Unikaj nieoczywistych skrótów. Co prawda krótkie nazwy są łatwiejsze i szybsze w pisaniu ale czas, który zaoszczędzisz pisząc zapewne z nawiązką stracisz starając się przypomnieć co właściwie oznacza np. zmienna
lwg
. Gdybyś nazwał jąliczbaWszystkichGatunkow
byłoby bardziej czytelnie, prawda? - Raczej unikaj polskich (ą, ś, ć, ż…) i innych liter wkraczających poza podstawowy zakres alfabetu łacińskiego (angielskiego), szczególnie jeśli masz zamiar dzielić się kodem z innymi. Kodowanie UTF-8, którego powinieneś używać (!), co prawda powinno prawidłowo obsłużyć wszelkie „ogonki” ale może się okazać, że ktoś, kto chce z Twojego kodu korzystać, ma ustawione inne kodowanie i zamiast zobaczyć w kodzie
żółć
, ujrzy nieczytelny ciąg krzaczków.
Konwencje dotyczące innych elementów języka, jak klasy, metody czy stałe, różnią się nieco od powyższych, tak więc do tematu nazewnictwa jeszcze powrócimy.
Warto też zajrzeć do poradników stylu programowania w Javie. Na przykład do Google Java Style.
Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz
Dzień dobry, bardzo ładna strona, świetny kurs. Dla mnie bardzo przejrzysty, przystępny.
Chciałam też zwrócić uwagę na drobną literówkę w słowie „Wszytskich”, oczywiście kurs i tak jest bardzo fajny. Pozdrawiam
Poprawione.
Dziękuję i pozdrawiam!
Nie wiem czy to za sprawą nowej versji Java czy eclips, ale wykonanie wpisy „int kursy1Rok, kursy2Rok, kursy3Rok;” oznaczone jest błędem.
Proszę sprawdzić, czy przy przepisywaniu nie pojawiła się jakaś literówka.
Jeśli nie, to proszę sprawdzić jak brzmi komunikat przy błędzie.
U siebie sprawdziłem w Eclipse, zmienne są podkreślone na żółto a komunikat „The value of local variable kursy1Rok is not used” oznacza, że zmienne zostały utworzone ale nie są nigdzie w programie wykorzystane, co jest normalne na tym etapie pisania programu.