Ist das
do
derwhile
-Syntax nur syntaktischer Zucker und nichts mitdo
eines Blocks zu tun?
Mehr oder weniger, ja. Es ist kein syntaktischer Zucker, es ist einfach ein eingebautes Sprachkonstrukt, wie def
oder class
, wie @meagar bereits geschrieben hat.
Es hat nichts mit dem do
eines Blocks zu tun, außer dass Keywords teuer sind und daher die Wiederverwendung von Keywords sinnvoll ist. (Mit "teuer" meine ich, dass sie den Programmierer in seiner Ausdruckskraft einschränken.)
In einer while
-Schleife gibt es zwei Möglichkeiten, den Block von der Bedingung zu trennen:
do
und Es gibt wiederum zwei verschiedene Ausdrucksseparatoren in Ruby:
;
und Also sind alle drei der folgenden Punkte gültig:
%Vor% [Natürlich würde das letzte nicht so geschrieben werden, du würdest das end
in eine neue Zeile schreiben, passend zum while
. Ich wollte nur zeigen, was das Minimum ist, um die Teile der while
Schleife zu trennen.]
Übrigens: Es ist höchst uninformiert, die Bedingung in Klammern zu setzen. Es gibt auch viele überflüssige Semikola in Ihrem Code. Und der Variablenname i
ist normalerweise für einen Index reserviert, kein Element. (Normalerweise verwende ich el
für generische Elemente, aber ich bevorzuge mehr semantische Namen.)
Es ist auch sehr unwichtig, eine Sammlung manuell zu iterieren. Ihr Code wäre viel besser geschrieben als
%Vor%Es ist nicht nur viel einfacher zu verstehen, was dies bewirkt (drucke alle Elemente des Arrays und lösche alle Elemente daraus), es ist auch viel einfacher zu schreiben (es gibt keine Möglichkeit, die Abbruchbedingung falsch zu bekommen oder zu schinden irgendwelche Zuordnungen). Es ist auch effizienter: Ihre Version ist Θ (n 2 ), diese ist Θ (n).
Und das ist auch nicht so, wie Sie es schreiben würden, denn Kernel#puts
implementiert dieses Verhalten sowieso schon. Also, was Sie wirklich schreiben würden, ist dies
oder vielleicht das
%Vor%[Hinweis: Dieser allerletzte ist nicht 100% äquivalent. Es druckt einen Zeilenumbruch für ein leeres Array, alle anderen drucken nichts.]
Einfach. Klar. Prägnant. Ausdrucksvoll. Schnell.
Vergleichen Sie das mit:
%Vor%Ich musste das sogar mehrmals ausführen, um 100% klar zu sein, was es tut.
Tags und Links ruby