Ruby for Newbies Bedingte Anweisungen und Schleifen

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.


Aufholen

  • Teil 1: Ruby installieren und loslegen
  • Teil 2: Variablen, Datentypen und Dateien 
  • Teil 3: Mit Klassen arbeiten
  • Teil 4: Conditionals und Loops

Screencast anzeigen


Bedingung Nr. 1: If-Anweisung

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.

elsif

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.

Anweisungen vs. Ausdrücke

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 als Modifikator

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?

Bedingung Nr. 2: Es sei denn, eine Erklärung

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

Bedingung 3: Fall / Wann-Erklärung

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

Ausdrücke aufbrechen

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

Schleife Nr. 1: Während der Schleife

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]

Schleife Nr. 2: Bis zur Schleife

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

Schleife Nr. 3: Für Schleife

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"

Das ist es!

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