Case und Bereiche in Ruby

Mehdi Farsi

Follow

Jul 22, 2019 – 3 min read

In diesem Artikel werden wir uns mit den folgenden Themen beschäftigen:

  • Der .. Operator
  • Der … Operator
  • Bereiche und gleitende Werte

Fühlen Sie sich Sie sich frei, den Case statement behind the scene Artikel zu lesen, wenn Sie mit der case Anweisung und der when Klausel nicht vertraut sind.

Vor dem Start

Ich freue mich sehr, Ihnen unser neuestes Projekt vorstellen zu können: Fun Facts about Ruby – Volume 1

Bitte verbreiten Sie diesen Beitrag und teilen Sie ihn! 🙏

Danke für Ihre Zeit!

In einer case-Anweisung können die when-Klauseln einen Bereich als Parameter annehmen

Hier, nimmt die case-Anweisung eine Ganzzahl als Parameter.

Da die when-Klausel einen Bereich als Parameter annimmt, wird der Range#===-Operator aufgerufen und überprüft, ob die Ganzzahl im Bereich enthalten ist.

Der ..-Operator in unserem Bereich stellt sicher, dass der linke und der rechte Operand im Bereich enthalten sind.

Die zweite when-Klausel nimmt einen Bereich mit dem … Operator auf.

Das bedeutet, dass der rechte Operand nicht im Bereich enthalten ist.

Nun, da wir mit der when-Klausel und Bereichen vertrauter sind, wollen wir einen Randfall untersuchen, der mir bei der Verwendung von Fließkommazahlen und Bereichen begegnet ist.

Fließkommazahlenbereich und die when-Klausel

Wie wir im obigen Beispiel gesehen haben, schließt der … Operator den rechten Operanden des Bereichs aus. Was aber, wenn ich den linken Operanden ausschließen möchte?

Hier, wird nur der Inhalt der ersten when-Klausel verarbeitet, die mit dem surface-Wert übereinstimmt – in unserem Fall when 70..90 then :second_value.

In diesem Fall liefert die case-Anweisung :second_value.

Die nächste when-Klausel wird also nie für ein surface von 90 ausgewertet.

Das funktioniert gut für einen Bereich von Ganzzahlen.

Aber was ist, wenn wir mit einem Bereich von Fließkommazahlen umgehen müssen?

Hier, gibt die case-Anweisung :third_value zurück, da surface streng genommen größer ist als 130.0.

Wenn wir surface = 130.0 neu zuordnen, dann liefert unsere case-Anweisung :second_value – genau wie die Bereiche der Ganzzahlen.

Beachten Sie, dass wir die Konstante Float::INFINITY verwenden, um unseren letzten Bereich zu beenden.

Dies ist äquivalent zu jedem Wert oberhalb von 130.0.

Zuletzt lassen Sie uns noch einen Blick auf den Begriff der endlosen Bereiche werfen – Dieser Begriff wurde in Ruby 2 eingeführt.6.0.

In Zeile 6 lässt der Bereich explizit den rechten Operanden weg.

Ruby interpretiert dies wie folgt: 130..Float::INFINITY

Damit vermeiden wir den impliziten Aufruf des Float::INFINITY, um unseren Bereich zu beenden.

Hier stimmt also der Wert von surface mit diesem Vergleich überein und die case-Anweisung liefert :third_value.

Voilà!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.