Ich habe Ausdrücke mit Bedingungsstil in Ruby gelesen. Allerdings stieß ich auf eine, die ich nicht ganz verstehen konnte, um das klassische FizzBuzz-Problem zu definieren. Ich verstehe das FizzBuzz-Problem und schrieb sogar mein eigenes, bevor ich die folgende schnelle Lösung unter Verwendung des ternären Operators fand. Wenn mir jemand erklären kann, wie diese Kette funktioniert, um das FizzBuzz-Problem zu lösen, würde es sehr geschätzt werden:)
%Vor%Einige Klammern helfen möglicherweise:
%Vor%Also, wenn i durch 3 teilbar ist, dann prüft es, ob i auch durch 5 teilbar ist. Wenn ja, druckt es "FizzBuzz", sonst nur "Buzz". Wenn i nicht durch drei teilbar ist, wird die Teilbarkeit erneut durch 5 überprüft und "Fizz" wird gedruckt, wenn dies der Fall ist, andernfalls nur i.
Hier ist eine Beschreibung des FizzBuzz-Problems, das in diesem Jeff-Atwood-Artikel aufgeführt ist.
>Schreiben Sie ein Programm, das die Zahlen von 1 bis 100. Aber für Vielfache von drei Drucken "Fizz" anstelle der Nummer und für die Vielfache von fünf Drucken "Buzz". Zum Zahlen, die Vielfache von beiden sind drei und fünf drucken "FizzBuzz".
Ein ternärer Operator ist eine Kurzschrift für eine if-else-Anweisung. Das allgemeine Format ist:
%Vor%Wenn ich also schreibe:
%Vor%Entspricht dem folgenden Code:
%Vor% Wo ist i % 2 == 0
, evaluate_if_cond_is_true ist 1
und evaluate_if_cond_is_false ist 0
.
Das Schöne an ternären Betreibern ist, dass sie kombiniert werden können. Dies bedeutet, dass die Anweisung, die ausgeführt wird, wenn eine der beiden Bedingungen wahr oder falsch ist, ein anderer ternärer Operator sein kann.
Lassen Sie die gesamte Bedingung lesbarer erscheinen:
%Vor%Und diese Zuordnung zu if-else-Anweisungen ist einfach mit den oben erläuterten Regeln:
%Vor%Dies ist kein gültiger Code, aber da das Ergebnis des ternären Operators im Ergebnisausdruck inline ist, wird es als Eingabe für den Befehl puts verwendet.
Zum Spaß, hier ist ein anderer Weg:
%Vor%Und noch eins:
%Vor%Das Ternär ist eine grundlegende Wenn-Dann-Struktur.
Das obige ist äquivalent zu ...
%Vor%Oder mit einigen Parens ...
%Vor%Tags und Links ruby operators conditional-operator fizzbuzz