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)
}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")
}1 3 3
Grunddatentypen
| 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)
}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())
}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))
}[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
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
Aufgabe
Wandle den Text "42" in eine Zahl um, verdopple sie und gib sie aus. Probiere es auch mit "x" und toIntOrNull().