EMZETT.
Login

Kurz: val ist unveränderlich (wie final), var veränderlich. Bevorzuge val.

Teil des Kurses Kotlin

Kapitel 2 von 13 im Kurs Kotlin. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

val und var

val ist unveränderlich (wie final), var veränderlich. Bevorzuge val.

fun main() {
    val name = "Mia"        // Typ wird erschlossen: String
    var punkte = 10
    punkte += 5
    // name = "Tom"         // Fehler: val kann nicht neu zugewiesen werden
    val alter: Int = 17     // Typ ausdrücklich
    println("$name $punkte $alter")
 
    val spaeter: String      // Zuweisung später, genau einmal
    spaeter = "gesetzt"
    println(spaeter)
}

Ausgabe:

Mia 15 17
gesetzt

Konstanten, die bereits zur Übersetzungszeit feststehen, deklarierst du mit const val auf oberster Ebene:

const val MAX_VERSUCHE = 3            // Konstante (Compile-Zeit), nur auf oberster Ebene
 
fun main() {
    val a = 1
    var b = 2
    b = a + b
    println("$a $b $MAX_VERSUCHE")
}

Ausgabe:

1 3 3

Grunddatentypen

TypBeispielBereich / Hinweis
Byte1278 Bit
Short3200016 Bit
Int42, 1_000_000, 0xFF32 Bit (Standard)
Long42L64 Bit
Float3.14f32 Bit
Double3.1464 Bit (Standard)
Booleantrue, false
Char'A'Unicode-Zeichen
String"Text"unveränderlich
fun main() {
    val i = 42
    val l = 3_000_000_000L
    val d = 3.14
    val f = 2.5f
    val c = 'K'
    println("${i is Int} ${l is Long} ${d is Double} ${f is Float} ${c is Char}")
    println(Int.MAX_VALUE)
    println(Int.MAX_VALUE + 1)         // Überlauf (kein Fehler!)
    println(Long.MAX_VALUE)
    println(0.1 + 0.2)
    println(7 / 2)                      // Ganzzahldivision
    println(7 / 2.0)
    println(7 % 3)
    println(-7 % 3)
}

Ausgabe:

true true true true true
2147483647
-2147483648
9223372036854775807
0.30000000000000004
3
3.5
1
-1

Typumwandlung

Kotlin wandelt Zahlentypen nie automatisch um. Du rufst toXxx() auf:

fun main() {
    val i = 42
    val l: Long = i.toLong()
    val d = i.toDouble()
    println("$l $d ${3.99.toInt()} ${65.toChar()} ${'A'.toInt()} ${"123".toInt() + 1}")
    println("abc".toIntOrNull())
    println("12".toIntOrNull())
    println("3.5".toDoubleOrNull() ?: 0.0)
    println(10.toString() + "5")
    println("true".toBoolean())
}

Ausgabe:

42 42.0 3 A 65 124
null
12
3.5
105
true

toIntOrNull() liefert null statt einer Ausnahme, wenn der Text keine Zahl ist.

Ranges und Zahlenoperationen

fun main() {
    println((1..5).toList())
    println((1 until 5).toList())
    println((10 downTo 1 step 3).toList())
    println(3 in 1..5)
    println(Math.max(3, 9))
    println(maxOf(3, 9, 4))
    println(Math.pow(2.0, 10.0))
    println(Math.sqrt(144.0))
    println(5.coerceIn(1, 3))
    println(10 shl 2)
    println(0b1010 and 0b0110)
    println(Math.round(2.5))
    println(String.format("%.2f", 3.14159))
}

Ausgabe:

[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[10, 7, 4, 1]
true
9
9
1024.0
12.0
3
40
2
3
3.14

Merke

  • val unveränderlich, var veränderlich; const val für Konstanten
  • Typinferenz: val x = 42; explizit: val x: Int = 42
  • Zahlen nie automatisch umwandeln: toInt(), toDouble(), toLong()
  • toIntOrNull() für sichere Umwandlung
  • Ganzzahldivision 7 / 2 = 3

Übungsaufgabe

Wandle den Text “42” in eine Zahl um, verdopple sie und gib sie aus. Probiere es auch mit “x” und toIntOrNull().

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung und erstes Programm

Weiter: Strings und Kontrollfluss

Alle Kapitel: Kotlin im Überblick