Kurz: val ist unveränderlich (wie final), var veränderlich. Bevorzuge val.
Teil des Kurses Kotlin
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
gesetztKonstanten, 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 3Grunddatentypen
| Typ | Beispiel | Bereich / Hinweis |
|---|---|---|
Byte | 127 | 8 Bit |
Short | 32000 | 16 Bit |
Int | 42, 1_000_000, 0xFF | 32 Bit (Standard) |
Long | 42L | 64 Bit |
Float | 3.14f | 32 Bit |
Double | 3.14 | 64 Bit (Standard) |
Boolean | true, 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
-1Typumwandlung
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
truetoIntOrNull() 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.14Merke
valunveränderlich,varveränderlich;const valfü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
Was ist der Unterschied zwischen val und var?
- val ist unveränderlich, var veränderlich (richtig)
- val ist für Zahlen, var für Text
- Es gibt keinen
- var ist schneller
Was liefert "abc".toIntOrNull()?
- null (richtig)
- 0
- Eine Exception
- -1
Wie wandelst du Int in Double um?
- x.toDouble() (richtig)
- (double) x
- Double(x)
- automatisch
Weiter im Kurs
Zurück: Einführung und erstes Programm
Weiter: Strings und Kontrollfluss
Alle Kapitel: Kotlin im Überblick