Switch-Anweisungen
Eine besondere Form der Fallunterscheidungen (if
/else
) sind die switch
-Anweisungen:
package main
import "fmt"
func main() {
zahl := 5
switch {
case zahl < 5:
fmt.Println("Zahl ist kleiner als 5")
case zahl < 10:
fmt.Println("Zahl ist kleiner als 10")
case zahl < 20:
fmt.Println("Zahl ist kleiner als 20")
}
}
Probier' es aus! Welche Texte erscheinen, wenn du das Programm startest?
Hier funktioniert switch
im Prinzip wie die Fallunterscheidung oben, es
werden die Fälle von oben nach unten durchgegangen, der erste der Zutrifft
wird ausgeführt.
Die erste Zeile kann wie in der if
-Anweisung auch mit einem einfachen Ausdruck geschrieben werden:
package main
import "fmt"
func leseZahl() int {
return 5
}
func main() {
switch zahl := leseZahl(); {
case zahl < 5:
fmt.Println("Zahl ist kleiner als 5")
default:
fmt.Println("Zahl ist größer oder gleich 5")
}
}
Wichtig ist das Semikolon bei dieser Form in der ersten Zeile der switch
-Anweisung. Es ist die Kurzform für
switch zahl := leseZahl(); true {
was bedeutet, dass der erste Fall, der true
ergibt, ausgeführt werden soll.
Stünde hier false
, würde der erste Fall, der false
ergibt, ausgeführt
werden.
Im Beispiel gibt es noch eine Besonderheit, den default
-Fall. Wenn keine der
Fälle, die unter case
abgefragt werden zutreffen, wird nach einem
default
-Fall gesucht und ggf. ausgeführt.
Es gibt noch mit der fallthrough
die Möglichkeit, mehrere Fälle zu überprüfen:
package main
import "fmt"
func main() {
switch zahl := 5; {
case zahl < 5:
fmt.Println("Zahl ist kleiner als 5")
fallthrough
case zahl < 10:
fmt.Println("Zahl ist kleiner als 10")
fallthrough
case zahl < 20:
fmt.Println("Zahl ist kleiner als 20")
}
}
Was ist der Unterschied zum ersten Beispiel aus diesem Abschnitt? Welche
Ausgaben erscheinen, wenn du das Programm laufen lässt? Die Anweisung
fallthrough
darf als letzte Anweisung in allen bis auf dem letzten Fall
vorkommen und bedeutet soviel wie »mache weiter, als ob nichts gewesen wäre«.
Wenn ein Fall ausgeführt wird und am Ende fallthrough
steht, bricht die
Verarbeitung nicht ab, sondern es werden weiter Fälle überprüft.
Wie im Abschnitt über Schleifen erwähnt, kann man mit break
auch eine
Switch-Anweisung beenden. Erreicht das Programm eine solche Anweisung, wird es
an der Stelle ausgeführt, an der die switch
Anweisung die schließende
Klammer hat.