Inhaltsverzeichnis
if, else und elsif
Wollen wir nun etwas Dynamik in unsere kleinen Programme bringen. Dazu nutzen wir den Befehl if. if ist eine Abfrage, ob ein bestimmter vergleich wahr ist. Dies wird meist anhand von Vergleichsoperatoren überprüft. Diese vergleichen zwei Argumente und geben entweder true(wahr) oder false(unwahr/falsch) zurück. Einer davon ist ==. Dieser überprüft, ob die Argumente gleich sind.
Ein if prüft nun folgendes:
- Bekomme ich hier ein true, einen String oder eine Zahl (AUCH 0).
Dann: Führe den nachfolgenden Code bis zu elsif, else oder end - Andernfalls ignoriere den Code bis zum elsif, else oder end
x
= 2
if x < 10
#1
puts "#{x} ist kleiner als 10"
#2
elsif x = 10
#3
puts "#{x} ist 10"
else
#4
puts "#{x} ist größer als 10"
end
#5
print "x ist gleich 3" if x == 3 #6
- zu 1: Das if leitet hier den Vergleich ein. Dieser lautet x < 10, also x kleiner 10. Die Befehle nach if werden ausgeführt, falls der Vergleich richtig war. Falls nicht, werden sie ignoriert.
- zu 2: puts kennen wir ja schon. Um dieses #{x} zu verstehen, braucht es nicht viel. Das #{} fügt den Wert in die Zeichenkette, den der Code zwischen den { und } zurückgibt. Ruby hat die Eigenschaft den Wert, der als letzter angegeben wird, als Rückgabewert zu sehen. In dem Fall ist der Rückgabewert x.
- zu 3: elsif kann nur an eine if-Kontrolle angehängt werden. Wenn der if-Vergleich fehlschlägt, wird diese Abfrage ausgeführt. Ansonsten funktioniert es genauso wie ein normales if. Übrigens kann auch an ein elsif ein elsif angehängt werden. elsif ist immer optional.
- zu 4: else kommt, wenn es kommt, immer an das Ende einer if-Abfrage steht. Es wird ausgeführt, wenn sowohl das if, alsauch die elsifs, falls vorhanden, falsch ergeben. else ist optional.
- zu 5: end markiert das Ende einer if-Abfrage. Danach dürfen weder elsif, noch else kommen.
- zu 6: Das ist eine der sehr praktischen Funktionen von Ruby: Schreibt man einen Befehl und danach eine if-Abfrage, wird der Befehl nur ausgeführt, wenn die Abfrage wahr ist.
Vergleichsoperatoren
Folgende Vergleiche kann man mit if ausführen:
Zeichen | Abfrage | Beispiel wahr | Beispiel falsch |
---|---|---|---|
== | Gleich | 5 == (25 / 5) | 8 == 5 |
< | kleiner als | 5 < 42 | 5 < 5 |
<= | kleiner oder gleich | 5 <= 5 | 42 <= 5 |
> | größer als | 42 > 5 | 5 > 5 |
>= | größer oder gleich | 5 >= 5 | 5 >= 42 |
(unvollständig) |
etwas mehr Dynamik
Unsere bisherigen Abfragen waren relativ nutzlos, da eigentlich schon vor dem ausführen des Codes klar ist, ob die Abfrage erfolgreich ist oder nicht.
wird ganz sicher nichts ausgeben.
Was wir brauchen sind Benutzereingaben, wir brauchen gets
.
x = gets
#1
if x.chomp!
#2
puts "Du hast '#{x}' eingegeben"
else
puts "Du hast nichts eingegeben"
end
- zu 1:
gets
fragt eine Benutzereingabe ab und gibt diese zurück. In diesem Fall wird das dann x zugewiesen - zu 2: Dieses
chomp!
ist eine Methode für Strings, die einen Zeilenumbruch am Ende der Zeichenkette entfernt. Dieser Zeilenumbruch kommt dadurch zustande, das man am Ende seiner Eingabe die Enter-Taste drückt.
unless
unless
ist das genaue gegenteil zu if. Die unless-Abfrage gelingt also, wenn sie false bekommt.
case
Wenn wir jetzt aber komplexere Abfragen tätigen wollen, bekommen wir, nur mit if, elsif und else zimlich seltsame Konstrukte:
Das ganze, ohne großes Traram, jetzt mit case
:
Wer ein wenig beim codelesen aufgepasst hat, der hat gemerkt, was case
macht:
Es vergleicht den Wert nach case
(in dem Fall x
) nacheinander mit den Werten nach when
.
Vermerk an C oder ähnliches Programmierer
Etwas wie
gibt es in Ruby nicht. In diesem Fall schreibt man: