Ruby ist eine der beliebtesten Sprachen im Internet. Wir haben hier auf Nettuts + eine neue Screencast-Serie gestartet, die Sie in Ruby einführen wird, sowie die großartigen Frameworks und Werkzeuge, die mit der Entwicklung von Ruby einhergehen. In diesem Kapitel werden wir untersuchen, wie bedingte Anweisungen und Schleifen in Ruby funktionieren.
Die if-Anweisung ist eine der ersten Verzweigungsarten, die Sie beim Programmieren lernen. Sie können erraten, was es bedeutet: Wenn dies wahr ist, machen Sie eine Sache. Wenn nicht, tun Sie etwas anderes. In Ruby sind diese ziemlich einfach zu schreiben:
name = "Andrew" wenn name == "Andrew" setzt "Hallo Andrew" Ende, wenn name == "Andrew" "Hallo Andrew" setzt, sonst setzt "Hallo jemand anderes" Ende
Nach dem Stichwort ob
, Code in Ihrer Bedingungsanweisung. Danach wird der Code ausgeführt, wenn die Bedingung true zurückgibt. Sie schließen die Aussage mit der Ende
Stichwort. Wenn Sie möchten, können Sie eine drücken sonst
Anweisung dort, die vorhersagbar ausgeführt wird, wenn die Bedingung falsch ist.
Es ist nicht schwer, auf mehrere Bedingungen zu prüfen. Setzen Sie einfach so viele elsif
Anweisungen, wie Sie zwischen den ob
und sonst
Aussagen. Ja das ist elsif
, eine Ehe von sonst
und ob
.
order = : size => "medium" def make_medium_cofee setzt "medium Anweisung" Ende #assume andere Funktionen, wenn order [: size] == "small" make_small_coffee; elsif order [: size] == "medium" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; sonst make_coffee; Ende
Wie ich schon sagte, können Sie so viele haben elsif
Bedingungen und die entsprechenden Codeblöcke nach Ihren Wünschen.
Die meisten Programmiersprachen unterscheiden zwischen Anweisungen und Ausdrücken. Eine Anweisung ist ein Code-Konstrukt, das nicht auf einen bestimmten Wert ausgewertet wird. Ein Ausdruck ist ein Code-Konstrukt tut einen Wert zurückgeben Der Aufruf einer Funktion ist beispielsweise ein Ausdruck, da ein Wert zurückgegeben wird. Eine if-Anweisung ist jedoch genau diese Anweisung, weil sie keinen Wert zurückgibt. Das bedeutet, dass Sie dies in Ihrem JavaScript nicht tun können:
message = if (someTruthyValue) "das ist wahr"; else "das ist falsch";
Offensichtlich können Sie dies nicht tun, da die if-Anweisung keinen Wert zurückgibt, den Sie zuweisen können Botschaft
.
Sie können dies jedoch mit Ruby tun, da Anweisungen tatsächlich Ausdrücke sind, das heißt, sie geben einen Wert zurück. So können wir das schaffen
message = if order [: size] == "small" "eine kleine" elsif-Order [: size] == "medium" "ein medium" sonst "making coffee" enden
Welcher Codeblock gerade ausgeführt wird, wird zum Wert von Botschaft
.
Wenn Sie keine haben elsif
oder sonst
Klauseln, und Ihre if-Anweisung hat nur eine Zeile. Sie können sie als Modifikator für eine "normale" Zeile verwenden.
setzt "Kaffee machen" wenn customer.would_like_coffee?
In den meisten Programmiersprachen möchten wir die Rückgabe des Bedingungsausdrucks umkehren, wir müssen ihn jedoch negieren, normalerweise mit dem Knall (!
) Operator.
engine_on = true, wenn! engine_on # bedeutet "Wenn nicht engine_on" "wartende Engine" #sollte nicht gesetzt werden, da "nicht engine_on" falsches Ende ist
Allerdings hat Ruby eine wirklich nette es sei denn
Operator, das hält uns davon ab, dies zu tun, während es uns viel lesbarer Code gibt:
es sei denn engine_on # "außer engine_on" ist besser als "wenn nicht engine_on" "service engine" endet
So wie ob
, Sie können verwenden es sei denn
als Modifikator:
setzt "Wartungs-Engine", es sei denn engine_on
Wenn Sie viele Optionen zur Bearbeitung haben, verwenden Sie if / elsif / else
könnte etwas wortreich sein. Versuchen Sie es mit der Case-Anweisung.
Stunde = 15 Fall, wenn Stunde < 12 puts "Good Morning" when hour > 12 Stunden < 17 puts "Good Afternoon" else puts "Good Evening" end
Es ist irgendwie ein bisschen - vielleicht wie ein Schaltergehäuse
Anweisung in JavaScript (oder anderen Sprachen), außer dass Sie keine einzige Variable auswerten. In der Fall / Ende
Schlüsselwörter können Sie so viele setzen wann
Aussagen, wie Sie möchten. Folge dem wann
durch den Bedingungsausdruck, und danach folgen die Codezeilen. Genau wie die if-Anweisung ist die case-Anweisung wirklich ein Ausdruck. Sie können ihn also einem Ausdruck zuweisen und einen zurückgegebenen Wert erfassen.
Stunde = 15 Nachricht = Fall, wenn Stunde < 12 "Good Morning" when hour > 12 Stunden < 17 "Good Afternoon" else "Good Evening" end puts message
Wenn Sie mit JavaScript vertraut sind, wissen Sie, dass die Codeblöcke in einer if-Anweisung von geschweiften Klammern umgeben sind. Wir machen das nicht in Ruby, daher scheint Ruby vom Whitespace abhängig zu sein. Nichts könnte weiter von der Wahrheit entfernt sein (nimm das, Pythonistas :)).
Wenn wir Ihre Aussagen als Einzeiler schreiben möchten, müssen Sie die verschiedenen Teile der Aussagen trennen… aber wie? Nun, Sie können Semikolons verwenden:
wenn name == "Andrew"; some_code; sonst; some_code; Ende
Wenn Ihnen das Aussehen nicht gefällt (was ich nicht mag), können Sie das Stichwort eingeben dann
zwischen den bedingten Ausdrücken und der Codezeile.
wenn name == "Andrew" dann sode_code; Ende
Dies funktioniert auch bei einer Case-Anweisung.
Fall, wenn x> 20 ist; setzt "<20" when x < 20 then puts "<20" end
Das sind also bedingte Anweisungen (ich meine Ausdrücke). Wie wäre es mit Schleifen? Schauen wir uns zuerst die while-Loops an.
Eine while-Schleife wird solange ausgeführt, bis die angegebene Bedingung falsch ist:
arr = ["John", "George", "Paul", "Ringo"] i = 0, während arr [i] arr [i] i + = 1 endet
Hier laufen wir über ein Array. wann arr [i]
Gibt false zurück (was bedeutet, dass sich keine Elemente mehr im Array befinden), wird die Ausführung der Schleife beendet. Innerhalb der Schleife drucken wir das aktuelle Element im Array aus und fügen ein Element zu unserer Inkrementvariablen hinzu.
Sie können auch verwenden während
als Modifikator
arr = ["John", "George", "Paul", "Ringo"] i = -1 setzt arr [i + = 1], während arr [i]
So wie es sei denn
ist das Gegenteil von ob
, bis um
ist das Gegenteil von während
. Die Schleife wird fortgesetzt, bis die Bedingung erfüllt ist:
days_left = 7; bis days_left == 0 setzt "es gibt noch # days_left in der Woche" days_left - = 1 end
Und natürlich ist es auch ein Modifikator.
days_left = 8 setzt "es gibt noch # days_left - = 1 in der Woche" bis days_left == 1
Ja, Ruby hat eine for-Schleife. Nein, es ist keine for-Schleife in anderen Sprachen. Es wirkt wie eine foreach-Schleife, um die Werte in einem Array oder Hash zu durchlaufen:
arr = ["John", "George", "Paul", "Ringo"] für Artikel in arr setzt Artikelende
Wenn Sie einen Hash durchlaufen, können Sie zwei Variablennamen verwenden, einen für den Schlüssel und einen für den Wert:
joe = : name => "Joe",: age => 30,: job => "plumber" für Schlüssel, val in Joe setzt "# key ist # val"
Ich hoffe, Sie genießen unsere Ruby for Newbies Screencast-Serie. Wenn es etwas gibt, was Sie gerne sehen würden, lassen Sie es mich in den Kommentaren wissen! (Und wenn Sie sich die Videos nicht ansehen, sollten Sie dies tun. Am Ende jedes Videos gibt es einen Bonus nur für den Bildschirm.)