1. Programmaufbau
// Einzeiliger Kommentar
/* Kommentar über
mehrere Zeilen */
fun main() { // Hauptprogramm: Hier startet das Programm
println("Hallo Welt!")
}
2. Variablen und Datentypen
val name = "Ada" // unveränderliche Variable (value)
var alter = 17 // veränderliche Variable (variable)
alter = 18 // neuer Wert: nur bei var möglich
var punkte: Int = 0 // Datentyp ausdrücklich angeben
val anzahl: Int = 42 // ganze Zahl
val preis: Double = 2.99 // Kommazahl (mit Punkt!)
val fertig: Boolean = true // Wahrheitswert: true oder false
val zeichen: Char = 'A' // einzelnes Zeichen in ' '
val text: String = "Hallo" // Zeichenkette in " "
"42".toInt() // → 42
"2.5".toDouble() // → 2.5
"abc".toIntOrNull() // → null (keine gültige Zahl)
3.7.toInt() // → 3 (Nachkommastellen fallen weg)
5.toDouble() // → 5.0
42.toString() // → "42"
3. Operatoren
7 / 2 // → 3 (Int / Int ergibt Int!)
7.0 / 2 // → 3.5
7 % 2 // → 1 (Rest der Division)
x += 2 // x = x + 2 (ebenso -=, *=, /=, %=)
x++ // x = x + 1 (x-- entsprechend)
3 == 3 // → true (gleich)
3 != 4 // → true (ungleich)
4 > 3 // → true (ebenso <, >=, <=)
!true // → false (nicht)
true && false // → false (und)
true || false // → true (oder)
x in 1..10 // → true, wenn 1 <= x <= 10
"Info" + "rmatik" // → "Informatik"
"Summe: ${x + 1}" // String-Template: Ausdruck einsetzen
"Alter: $alter" // bei einfachen Variablen ohne { }
4. Verzweigungen
if (x > 5) {
println("groß")
} else if (x == 5) { // beliebig viele else if (optional)
println("fünf")
} else { // optional
println("klein")
}
val maximum = if (a > b) a else b // if als Ausdruck
when (tag) {
1 -> println("Montag")
2, 3 -> println("Dienstag oder Mittwoch")
in 4..5 -> println("Donnerstag oder Freitag")
else -> println("Wochenende")
}
val note = when { // when ohne Argument: Bedingungen prüfen
punkte >= 13 -> "sehr gut"
punkte >= 10 -> "gut"
else -> "nicht so gut"
}
5. Schleifen
while (i < 3) { // Bedingung vor jedem Durchlauf prüfen
i++
}
do { // mindestens ein Durchlauf
i--
} while (i > 0)
for (i in 1..3) { print(i) } // → 123
for (i in 0 until 3) { print(i) } // → 012 (ohne Endwert)
for (i in 3 downTo 1) { print(i) } // → 321
for (i in 0..10 step 5) { print(i) } // → 0510 (Schrittweite 5)
for (z in "Hallo") { print(z) } // → Hallo (jedes Zeichen)
for (element in liste) { } // jedes Element einer Liste
repeat(3) { // Block 3-mal ausführen
println("Hallo")
}
for (i in 1..10) {
if (i == 2) continue // Rest dieses Durchlaufs überspringen
if (i == 4) break // Schleife sofort beenden
println(i) // → 1, 3
}
6. Funktionen
fun quadrat(x: Int): Int { // Parameter und Rückgabetyp
return x * x
}
fun doppelt(x: Int) = 2 * x // Kurzform für einen einzigen Ausdruck
fun gruessen(name: String, gruss: String = "Hallo") { // Standardwert
println("$gruss, $name!") // ohne Rückgabetyp: keine Rückgabe
}
quadrat(4) // → 16
gruessen("Ada") // gibt "Hallo, Ada!" aus
gruessen("Ada", "Moin") // gibt "Moin, Ada!" aus
7. null-Sicherheit
var eingabe: String? = null // String? : Wert darf auch null sein
eingabe?.length // sicherer Aufruf: → null, falls eingabe null ist
eingabe?.length ?: 0 // Elvis-Operator: Ersatzwert, falls null
if (eingabe != null) {
println(eingabe.length) // hier ist eingabe sicher nicht null
}
eingabe!!.length // Absturz, falls eingabe null ist (vermeiden!)