Hallo 1unitedpower
Ich teile deine Begeisterung über den Vorschlag für do-Expressions größtenteils und füge mal den Link zum Proposal hinzu. Wie du schon sagtest, sind wir allerdings noch ziemlich am Anfang des Standardisierungsprozesses, und ob und wenn ja was daraus wird, muss sich erst noch zeigen. Es sind schon Vorschläge gekippt worden, die in dem Prozess bereits deutlich weiter fortgeschritten waren.
Meine Freude über den Vorschlag beruht im Übrigen auch nicht so sehr darauf, dass ich do-Expressions, insbesondere in ihrer gegenwärtigen Fassung, für der Weisheit letzten Schluss halten würde, sondern vielmehr darauf, dass durch diesen Vorschlag hoffentlich eine längst überfällige Diskussion angestoßen wird. Nämlich die über die Frage, inwieweit nicht viele Sprachkonstrukte die bislang als Statements definiert sind, in Zukunft nicht besser als Ausdrücke angesehen werden sollten.
Gewöhnliche Funktionen als Ausdrücke definieren zu können war sicher eine der besten Designentscheidungen bei der Entwicklung von JavaScript. Dem verdankt die Sprache einen großen Teil ihrer Ausdrucksstärke. Dass viele andere Konstrukte, darunter insbesondere Kontrollstrukturen wie if und switch, jedoch lediglich als Statements implementiert wurden, ist daher umso bedauerlicher.
Könnte man in JavaScript Code ähnlich diesem Elixir-Beispiel schreiben, wäre das in vielen Situationen nützlich. Einige davon sind in dem von dir verlinkten Artikel beschrieben.
value = if condition do
"done this"
else
"done that"
end
result = cond do
number > 10 ->
"greater than 10"
number > 20 ->
"greater than 20"
number > 30 ->
"greater than 30"
end
Den Trend weg von Statements hin zu Expressions verkörpert auch Rust, das syntaktisch etwas näher an JavaScript dran ist als Elixir. Auch in dieser Sprache gibt es bedingte Ausdrücke mit Anweisungsblöcken die zu einem Wert aufgelöst werden, der bei Bedarf weiterverarbeitet werden kann. Der Wert des letzten Ausdrucks wird zurückgegeben.
let value = if condition {
"done this"
} else {
"done that"
};
Ich würde mir wünschen, dass zunächst einmal gewissenhaft geprüft wird, inwieweit entsprechende Statements in JavaScript nicht direkt in Expressions umgewandelt werden können, ohne dabei das ganze Kartenhaus zum Einsturz zu bringen, bevor ein weiteres Syntaxelement hinzugefügt wird. Sollte man dabei wider Erwarten zu dem Ergebnis kommen, dass dies nicht möglich ist, oder aber dass do-Expressions einen zusätzlichen Nutzen bringen, würde ich die Standardisierung der Syntax auf jeden Fall begrüßen.
Gruß,
Orlok