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.

Int / Long Double / Float Boolean / Char konwersje
1

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.

TypCo przechowujePrzykład wartości
IntLiczba całkowita42
LongBardzo duża liczba całkowita9_000_000_000L
DoubleLiczba z przecinkiem (domyślna)3.14
FloatLiczba z przecinkiem, mniejsza precyzja3.14f
BooleanWartość logicznatrue / false
CharPojedynczy znak'A'
2

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.

Int – domyślny typ liczb całkowitych
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:

Long – bardzo duże liczby
val ludnoscSwiata = 8_000_000_000L   // Long (litera L na końcu)
val odlegloscWMetrach = 9_460_730_000_000L
Podkreślenia dla czytelności

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.

3

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).

TypPrecyzjaOznaczenie
DoubleWiększa (domyślny typ dla ułamków)brak – np. 3.14
FloatMniejszalitera f – np. 3.14f
Double i Float
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)
Na start wybieraj Double

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.

4

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.

Boolean – prawda/fałsz
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.

Char – jeden znak w apostrofach
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
Apostrof to nie cudzysłó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.

5

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.

Metody i właściwości na wartościach
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.

6

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:

MetodaZamienia 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
Zamiana typów
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
toInt() obcina, nie zaokrągla

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:

Dzielenie: Int kontra Double
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
7

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
Dlaczego to dobre rozwiązanie

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.

8

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
9

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.
  • Booleantrue/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 / 2 daje 2 (Int); aby uzyskać 2.5, jedna z liczb musi być Double.
10

Zadania do wykonania

Zadania wykonaj w Kotlin Playground (play.kotlinlang.org).

Zadanie 1 łatwe

Zadeklaruj po jednej zmiennej każdego typu: Int, Double, Boolean i Char. Wypisz każdą z nich w osobnej linii.

Zadanie 2 łatwe

Wypisz wynik dzielenia 7 / 2 oraz 7.0 / 2. Porównaj oba wyniki i w komentarzu napisz, dlaczego się różnią.

Zadanie 3 łatwe

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.

Zadanie 4 średnie

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.