Fandom

Mini-Wikia

Ruby 4 Everyone/Kontrollstrukturen

< Ruby 4 Everyone

1.771Seiten in
diesem Wiki
Seite hinzufügen
Diskussion0 Teilen

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.

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.

Ruby mini.png
Beispiel:

x = 8
puts x == 8
puts x == 4

Konsole-mini.png
Ausgabe:

true
false

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


Ruby mini.png
Komplexeres Beispiel:

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.
Ruby mini.png
Dadurch kann man z.B. auch Rechenoperationen hineinschreiben:

print "#{8 + 6}"

  • 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.

Ruby mini.png
Code:

print "lol" if 8 == 5

wird ganz sicher nichts ausgeben.
Was wir brauchen sind Benutzereingaben, wir brauchen gets.

Ruby mini.png
Code:

x = gets                             #1
if x.chomp!                          #2
  puts "Du hast '#{x}' eingegeben"
else
  puts "Du hast nichts eingegeben"
end

Konsole-mini.png
Ausgabe (wenn bla alb bla eingegeben wurde):

Du hast 'bla alb bla' eingegeben

Konsole-mini.png
Ausgabe (wenn nix eingegeben wurde):

Du hast nichts eingegeben

  • 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.

Ruby mini.png
Beispiel:

print "foo" unless gets.chomp == "bar"

Konsole-mini.png
Ausgabe (wenn xyz eingegeben wurde):

foo

Konsole-mini.png
Ausgabe (wenn bar eingegeben wurde):

<nichts>

case

Wenn wir jetzt aber komplexere Abfragen tätigen wollen, bekommen wir, nur mit if, elsif und else zimlich seltsame Konstrukte:

Ruby mini.png
Eines davon:

if x == 1
  #irgendwas
elsif x == 2
  #irgendwas
elsif x == 3
  #irgendwas
elsif   #etc.
end

Das ganze, ohne großes Traram, jetzt mit case:

Ruby mini.png
Besser so?:

case x
  when 1
  #irgendwas
  when 2
  #irgendwas
  when 3
  #irgendwas
  when #etc.
end

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

Ruby mini.png
Code:

case x
  when 1
  when 2
  when 3
  #irgendwas
  when 4
  #irgendwas
end

gibt es in Ruby nicht. In diesem Fall schreibt man:

Ruby mini.png
Code:

case x
  when 1, 2, 3 then
  #irgendwas
  when 4 then
  #irgendwas
end

Auch bei Fandom

Zufälliges Wiki