Typy podstawowe i konwersje
Poznasz podstawowe typy danych: Int, Long, Double,
Float, Boolean i Char. Dowiesz się, że w Kotlinie
każda wartość jest obiektem, oraz nauczysz się jawnie zamieniać typy – bo Kotlin
nie konwertuje liczb samodzielnie.
Czym jest typ
Typ określa, jakiego rodzaju dane przechowuje zmienna i jakie operacje są na nich możliwe. Inaczej traktujemy liczbę całkowitą, inaczej liczbę z przecinkiem, a jeszcze inaczej tekst czy pojedynczy znak. Kotlin zna typ każdej wartości i pilnuje, byś używał jej zgodnie z przeznaczeniem.
| Typ | Co przechowuje | Przykład wartości |
|---|---|---|
Int | Liczba całkowita | 42 |
Long | Bardzo duża liczba całkowita | 9_000_000_000L |
Double | Liczba z przecinkiem (domyślna) | 3.14 |
Float | Liczba z przecinkiem, mniejsza precyzja | 3.14f |
Boolean | Wartość logiczna | true / false |
Char | Pojedynczy znak | 'A' |
Liczby całkowite: Int i Long
Int to podstawowy typ liczb całkowitych (bez części po przecinku).
Mieści wartości mniej więcej od –2 do +2 miliardów. To wystarcza w większości
zadań – liczbę całkowitą zapisaną bez żadnego oznaczenia Kotlin domyślnie traktuje
jako Int.
val wiek = 18 // Int val liczbaUczniow = 256 // Int val temperatura = -5 // Int (może być ujemny)
Gdy liczba jest za duża dla typu Int (np. liczba
ludności na świecie), używamy typu Long. Wartości Long
oznaczamy literą L na końcu:
val ludnoscSwiata = 8_000_000_000L // Long (litera L na końcu) val odlegloscWMetrach = 9_460_730_000_000L
W długich liczbach możesz wstawiać znaki podkreślenia _ dla czytelności:
1_000_000 czyta się dużo łatwiej niż 1000000. Kotlin je
ignoruje – to czysto wizualna pomoc.
Liczby z przecinkiem: Double i Float
Do liczb z częścią ułamkową służą Double i Float.
Uwaga: w kodzie używamy kropki, nie przecinka (3.14,
nie 3,14).
| Typ | Precyzja | Oznaczenie |
|---|---|---|
Double | Większa (domyślny typ dla ułamków) | brak – np. 3.14 |
Float | Mniejsza | litera f – np. 3.14f |
val wzrost = 1.75 // Double (domyślnie dla liczb z kropką) val cena = 19.99 // Double val temperatura = 36.6f // Float (litera f na końcu)
Do liczb z przecinkiem domyślnie używaj Double – ma większą precyzję
i nie wymaga żadnego oznaczenia. Float przydaje się rzadziej,
gdy zależy nam na oszczędności pamięci.
Boolean i Char
Boolean przechowuje jedną z dwóch wartości logicznych:
true (prawda) albo false (fałsz). Używamy go wszędzie tam,
gdzie coś jest „tak/nie” – czy użytkownik jest pełnoletni, czy gra trwa, czy plik istnieje.
val pelnoletni = true val graTrwa = false
Char to pojedynczy znak zapisany w
apostrofach: litera, cyfra albo symbol. To ważne odróżnienie
od tekstu (String), który zapisujemy w cudzysłowie i może mieć wiele znaków.
val ocena = '5' // Char – pojedynczy znak val inicjal = 'K' // Char // Porównaj z tekstem (String) w cudzysłowie: val imie = "Krzysztof" // String – wiele znaków
'A' (apostrofy) to znak typu Char, a "A"
(cudzysłów) to tekst typu String. To dwa różne typy – nie można ich
mieszać. Char zawsze zawiera dokładnie jeden znak.
W Kotlinie wszystko jest obiektem
W Kotlinie nawet zwykła liczba czy znak są pełnoprawnymi obiektami – mają własne metody i właściwości, które możesz wywołać przez kropkę. Nie ma „gołych”, uproszczonych liczb – każda wartość czegoś potrafi.
val liczba = 42 println(liczba.toString()) // "42" – liczba zamieniona na tekst println(liczba.toDouble()) // 42.0 – jako Double val znak = 'A' println(znak.code) // 65 – kod liczbowy znaku
Dzięki temu zamiana typów jest naturalna: po prostu wywołujesz na wartości odpowiednią metodę. I właśnie tym zajmiemy się w następnej sekcji.
Konwersje jawne
Konwersja to zamiana wartości z jednego typu na inny. W Kotlinie
robimy to jawnie – wywołując metodę to...() pasującą
do typu docelowego:
| Metoda | Zamienia na |
|---|---|
.toInt() | liczbę całkowitą Int |
.toLong() | dużą liczbę całkowitą Long |
.toDouble() | liczbę z przecinkiem Double |
.toFloat() | liczbę z przecinkiem Float |
.toString() | tekst String |
val cena = 19.99 // Double val cenaCalkowita = cena.toInt() // 19 – część po przecinku jest OBCINANA val punkty = 7 // Int val punktyDouble = punkty.toDouble() // 7.0
Zamiana Double na Int przez toInt()
odcina część po przecinku, a nie zaokrągla:
19.99.toInt() daje 19, nie 20.
Bardzo ważny przypadek to dzielenie liczb całkowitych:
val a = 5 / 2 // 2 (!) dzielenie całkowite – reszta przepada val b = 5.0 / 2 // 2.5 – wystarczy, że jedna liczba jest Double val c = 5.toDouble() / 2 // 2.5 – jawna konwersja
Brak niejawnej konwersji liczb
To jedna z najważniejszych zasad w Kotlinie: liczba jednego typu nie
zamienia się sama na inny typ. Nie możesz wpisać liczby Int
tam, gdzie wymagany jest Double – musisz konwersję wykonać samodzielnie.
❌ Licząc na automat
val calkowita: Int = 5 val ulamkowa: Double = calkowita // Błąd! Int nie zamieni // się sam na Double
✅ Konwersja jawna
val calkowita: Int = 5
val ulamkowa: Double =
calkowita.toDouble()
// OK - 5.0
Automatyczne konwersje bywają źródłem ukrytych błędów (np. niespodziewanej utraty dokładności). Wymagając jawnej zamiany, Kotlin sprawia, że zawsze widać w kodzie, gdzie i jaka konwersja się odbywa.
Częste błędy
❌ Błąd 1: oczekiwanie ułamka z dzielenia całkowitego
❌ Spodziewasz się 2.5
val wynik = 5 / 2 // wynik to 2, nie 2.5! // Int / Int = Int
✅ Co najmniej jedna liczba Double
val wynik = 5.0 / 2 // wynik to 2.5
❌ Błąd 2: przypisanie Int do Double bez konwersji
❌ Brak toDouble()
val liczba: Int = 10 val d: Double = liczba // Błąd kompilacji
✅ Z konwersją
val liczba: Int = 10 val d: Double = liczba.toDouble() // OK - 10.0
❌ Błąd 3: Char w cudzysłowie
❌ Cudzysłów to String
val znak: Char = "A" // Błąd! "A" to String, // nie Char
✅ Char w apostrofach
val znak: Char = 'A' // OK
❌ Błąd 4: za duża liczba dla Int
❌ Przekroczony zakres Int
val duza = 9_000_000_000 // Błąd! za duże dla Int
✅ Oznacz jako Long literą L
val duza = 9_000_000_000L // OK - Long
Podsumowanie
- Int – liczby całkowite (domyślny typ); Long – bardzo duże, z literą
L. - Double – liczby z przecinkiem (domyślny); Float – mniejsza precyzja, z literą
f. W kodzie kropka, nie przecinek. - Boolean –
true/false; Char – pojedynczy znak w apostrofach. - W Kotlinie każda wartość jest obiektem z metodami (np.
liczba.toDouble()). - Konwersje wykonujemy jawnie:
toInt(),toDouble(),toString()…toInt()obcina część po przecinku. - Kotlin nie konwertuje liczb automatycznie – Int nie zamieni się sam na Double.
- Dzielenie
5 / 2daje2(Int); aby uzyskać2.5, jedna z liczb musi być Double.
Zadania do wykonania
Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).
Zadeklaruj po jednej zmiennej każdego typu: Int, Double,
Boolean i Char. Wypisz każdą z nich w osobnej linii.
Wypisz wynik dzielenia 7 / 2 oraz 7.0 / 2. Porównaj
oba wyniki i w komentarzu napisz, dlaczego się różnią.
Zadeklaruj zmienną Double o wartości 3.99. Zamień ją na
Int metodą toInt() i wypisz oba wyniki. Sprawdź, czy
liczba została zaokrąglona, czy obcięta.
Zadeklaruj trzy oceny jako liczby całkowite (Int), np. 4, 5 i 3.
Policz ich średnią tak, aby wynik był dokładny (z częścią po
przecinku) – będziesz musiał użyć konwersji na Double. Wypisz średnią.
Zastanów się, co by się stało, gdybyś podzielił sumę przez 3 bez konwersji.