Zmienne – val i var
Zmienne to podstawowy sposób przechowywania danych w programie. Poznasz dwa słowa
kluczowe – val i var – nauczysz się, czym się różnią,
jak Kotlin sam rozpoznaje typ wartości oraz kiedy warto podać typ samodzielnie.
Czym jest zmienna
Zmienna to nazwany pojemnik na wartość. Nadajesz mu nazwę, wkładasz do niego dane (np. liczbę albo tekst), a potem odwołujesz się do tych danych przez nazwę – zamiast wpisywać wartość za każdym razem.
fun main() { val imie = "Anna" // pojemnik o nazwie imie, w środku tekst "Anna" println(imie) // wypisze: Anna println("Cześć, " + imie) // wypisze: Cześć, Anna }
W Kotlinie zmienną deklarujemy jednym z dwóch słów kluczowych: val albo var. Wybór między nimi to jedna z najważniejszych decyzji, jaką podejmujesz przy każdej zmiennej.
val i var – dwa rodzaje zmiennych
| Słowo kluczowe | Znaczenie | Wartość można zmienić? |
|---|---|---|
val | Wartość przypisywana tylko raz (od ang. value). | ❌ Nie |
var | Zmienna, którą można nadpisywać (od ang. variable). | ✅ Tak |
fun main() { val stolica = "Warszawa" println(stolica) // Warszawa // stolica zostaje "Warszawa" do końca programu }
fun main() { var wynik = 0 println(wynik) // 0 wynik = 10 // nadpisujemy nową wartością (bez val/var!) println(wynik) // 10 wynik = wynik + 5 // zwiększamy o 5 println(wynik) // 15 }
Słowa val / var piszemy tylko przy
deklaracji – czyli gdy zmienna powstaje. Przy późniejszej zmianie
wartości używamy samej nazwy: wynik = 10, bez var.
val nie da się zmienić
Próba nadpisania zmiennej val kończy się błędem już podczas
pisania kodu – program nawet się nie uruchomi. To celowe zabezpieczenie:
skoro coś ma być stałe, język tego pilnuje.
❌ Próba zmiany val
val pi = 3.14 pi = 3.15 // Błąd! val można // przypisać tylko raz
✅ Potrzebujesz zmian? Użyj var
var licznik = 0 licznik = 1 licznik = 2 // var można nadpisywać // dowolnie wiele razy
Kiedy widzisz val, masz pewność, że wartość się nie zmieni w trakcie
działania programu. To ułatwia czytanie kodu i zapobiega przypadkowym pomyłkom –
dlatego val jest w Kotlinie wyborem domyślnym.
Inferencja typów – Kotlin sam rozpoznaje typ
Każda zmienna ma swój typ – czyli rodzaj danych, jakie przechowuje (liczba całkowita, tekst, liczba z przecinkiem itd.). W Kotlinie najczęściej nie musisz typu podawać – język sam go odgaduje na podstawie wartości. To nazywa się inferencja typów.
val imie = "Anna" // Kotlin widzi tekst -> typ String val wiek = 18 // liczba całkowita -> typ Int val wzrost = 1.75 // liczba z przecinkiem -> typ Double val pelnoletni = true // prawda/fałsz -> typ Boolean
Mimo że nigdzie nie napisaliśmy słowa Int czy String,
każda zmienna ma już ustalony typ i nie da się go później zmienić.
Typy poznasz dokładniej w następnej lekcji – tu wystarczy wiedzieć, że Kotlin
sam je przypisuje.
Jawne podanie typu
Typ możesz też podać samodzielnie – piszemy go po nazwie zmiennej, po dwukropku:
val wiek: Int = 18 var licznik: Int = 0 val imie: String = "Anna"
Najczęściej typ pomijamy (inferencja wystarcza), ale czasem warto go podać:
| Kiedy podać typ jawnie | Dlaczego |
|---|---|
| Brak wartości początkowej | Skoro nie ma wartości, Kotlin nie ma z czego odgadnąć typu – musisz go wskazać. |
| Dla czytelności | Gdy z samej wartości nie wynika jasno, co przechowujesz, jawny typ działa jak dokumentacja. |
| Konkretny typ liczbowy | Gdy chcesz typ inny niż domyślny (np. Long zamiast Int). |
fun main() { val wynik: Int // deklarujemy typ, wartość nadamy później wynik = 42 // przypisanie (dla val – tylko raz) println(wynik) // 42 }
Jeśli typ jest oczywisty z wartości – pomiń go i zdaj się na inferencję. Podawaj typ jawnie tylko wtedy, gdy faktycznie coś to wnosi (brak wartości, czytelność, nietypowy typ liczbowy).
Nazewnictwo zmiennych
Dobra nazwa mówi, co zmienna przechowuje. W Kotlinie obowiązują zasady:
- Nazwy piszemy stylem camelCase: pierwsze słowo małą literą, kolejne wielką – np.
wiekUcznia,liczbaPunktow. - Nazwa zaczyna się od litery, nie może zawierać spacji ani zaczynać się od cyfry.
- Kotlin rozróżnia wielkość liter:
wiekiWiekto dwie różne nazwy. - Wybieraj nazwy opisowe – łatwiej zrozumieć kod po czasie.
| ✅ Dobre nazwy | ❌ Słabe nazwy |
|---|---|
wiekUcznia | w (nic nie mówi) |
liczbaPunktow | x1 (zagadkowe) |
czyAktywny | dane (zbyt ogólne) |
Kiedy val, a kiedy var
Prosta reguła, której warto się trzymać od początku:
Domyślnie deklaruj zmienne jako val. Jeśli w trakcie pisania
okaże się, że wartość naprawdę musi się zmieniać (np. licznik w pętli,
suma, która rośnie) – wtedy zmień val na var.
Taki nawyk daje bezpieczniejszy i czytelniejszy kod.
| Sytuacja | Wybór |
|---|---|
| Stała stawka VAT, nazwa miasta, numer PESEL | val |
| Suma, która rośnie w trakcie obliczeń | var |
| Licznik powtórzeń w pętli | var |
| Wynik wczytany raz od użytkownika | val |
Częste błędy
❌ Błąd 1: zmiana wartości val
❌ Nadpisanie val
val stawka = 100 stawka = 200 // Błąd! val tylko raz
✅ Zmienna do zmieniania = var
var stawka = 100 stawka = 200 // OK
❌ Błąd 2: użycie zmiennej przed przypisaniem
❌ Brak wartości w chwili użycia
val wynik: Int println(wynik) // Błąd! wynik nie ma // jeszcze wartości wynik = 5
✅ Najpierw przypisz, potem użyj
val wynik: Int wynik = 5 println(wynik) // OK
❌ Błąd 3: próba zmiany typu
❌ Inny typ niż na starcie
var liczba = 5 liczba = "pięć" // Błąd! typ ustalony // na Int przy pierwszej // wartości
✅ Trzymaj się ustalonego typu
var liczba = 5 liczba = 10 // OK - wciąż liczba (Int)
❌ Błąd 4: literówka i wielkość liter w nazwie
❌ Imie to inna nazwa niż imie
val imie = "Ola" println(Imie) // Błąd! nie istnieje // zmienna "Imie"
✅ Dokładnie ta sama nazwa
val imie = "Ola" println(imie) // OK
Podsumowanie
val– wartość przypisywana raz (nie da się zmienić).var– zmienna, którą można nadpisywać dowolnie wiele razy.- Słowo
val/varpiszemy tylko przy deklaracji; przy zmianie wartości używamy samej nazwy. - Inferencja typów: Kotlin sam rozpoznaje typ z wartości – zwykle nie musisz go podawać.
- Typ podajemy jawnie po dwukropku (
val wiek: Int = 18) m.in. gdy brak wartości początkowej. - Nazwy piszemy stylem camelCase, opisowo; Kotlin rozróżnia wielkość liter.
- Dobra praktyka: zaczynaj od val, zmień na var tylko gdy wartość musi się zmieniać.
Zadania do wykonania
Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).
Zadeklaruj zmienną val z Twoim imieniem oraz zmienną var
z Twoim wiekiem. Wypisz obie w osobnych liniach za pomocą println.
Zadeklaruj var punkty = 0. Wypisz wartość, następnie zmień ją na 50,
wypisz ponownie, na koniec zwiększ o 25 (punkty = punkty + 25)
i wypisz wynik.
Zadeklaruj cztery zmienne z jawnie podanym typem: jedną typu
Int, jedną Double, jedną String i jedną
Boolean. Wypisz każdą z nich.
Napisz program „dane gracza”: użyj val dla rzeczy stałych
(np. nick, rok urodzenia) oraz var dla liczby punktów, która
się zmienia. Wypisz dane początkowe, zmień liczbę punktów co najmniej dwa razy
i za każdym razem wypisz aktualny stan. W komentarzu uzasadnij, dlaczego dla
każdej zmiennej wybrałeś val albo var.