Orlok: JavaScript Proposal: do-Expresssions

Beitrag lesen

problematische Seite

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.

# Expression for a single condition

value = if condition do
    "done this"
else
    "done that"
end


# Expression for multiple conditions

result = cond do
    number > 10 ->
        "greater than 10"    # EDIT:
                             # Gunnar hat natürlich recht,
    number > 20 ->           # das sollte in umgekehrter
        "greater than 20"    # Reihenfolge geprüft werden. ;-)

    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.

// Conditional expression

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

1 92

JavaScript Proposal: do-Expresssions

1unitedpower
  • javascript
  1. 1
    Orlok
    1. 0
      Gunnar Bittersmann
      1. 0
        Christian Kruse
  2. -2
    pl
    1. 0
      pl
      1. 0
        Gunnar Bittersmann
        1. 0
          pl
          1. 0
            Gunnar Bittersmann
            1. 0
              Matthias Apsel
              • zu diesem forum
          2. 0
            dedlfix
            1. 0
              pl
              1. 0
                Tabellenkalk
                • zu diesem forum
    2. 0
      Gunnar Bittersmann
      1. 0
        pl
        1. 0
          Gunnar Bittersmann
          1. -1
            pl
  3. 0
    dedlfix
    1. 0
      1unitedpower
      1. 0
        dedlfix
        1. 0
          1unitedpower
          1. 0
            1unitedpower
        2. 0
          Gunnar Bittersmann
          • sprache
          1. 0
            Gunnar Bittersmann
            • musik
            • sprache
            1. 0
              pl
          2. 0
            dedlfix
    2. 0
      Rolf B
      1. 0
        1unitedpower
        1. 0
          Christian Kruse
    3. 0
      pl
      1. 0
        dedlfix
        1. 0
          pl
          1. 0
            dedlfix
            1. 0
              pl
          2. 0
            Tabellenkalk
            • sonstiges
            1. -2
              pl
              1. 0
                Schnabeltier
                1. 0
                  pl
                  1. 0
                    Schnabeltier
                  2. 0
                    1unitedpower
                    1. 0
                      JürgenB
                      1. 0
                        MudGuard
          3. 2
            1unitedpower
            1. 0
              pl
              1. 0
                1unitedpower
                1. -2
                  pl
                  1. 0
                    1unitedpower
                    1. 0
                      pl
                2. 0
                  Matthias Apsel
                  1. -1
                    pl
                    • zu diesem forum
                    1. 0
                      Matthias Apsel
                      1. 0
                        pl
                        1. 0
                          Gunnar Bittersmann
                          1. 0
                            Tabellenkalk
                    2. 0
                      Tabellenkalk
                  2. 0
                    1unitedpower
            2. 0
              Christian Kruse
              • programmiertechnik
              1. 0
                JürgenB
                1. 0
                  Christian Kruse
                2. 1
                  Tabellenkalk
                  1. 0
                    JürgenB
                    1. 0
                      Tabellenkalk
                  2. 1
                    dedlfix
                    1. 0
                      Tabellenkalk
                    2. 0
                      Christian Kruse
              2. 0
                MudGuard
                • menschelei
                1. 0
                  Christian Kruse
                  1. 0
                    Gunnar Bittersmann
                    1. 0
                      Christian Kruse
        2. 0
          Christian Kruse
          1. 0
            dedlfix
            1. 0
              Christian Kruse
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                    1. 0
                      Christian Kruse
                      1. 0
                        JürgenB
                      2. 1
                        MudGuard
                        1. 0
                          Rolf B
                          1. 0
                            MudGuard
                            1. 0
                              Rolf B
                              1. 0
                                1unitedpower
                2. 0
                  1unitedpower
                  1. 0
                    Christian Kruse
                    1. 1
                      1unitedpower
                      1. 0
                        Christian Kruse
  4. 0
    pl
    1. 0
      1unitedpower
      1. 0
        pl
  5. 0
    Tabellenkalk
    1. 0
      pl
      1. 0
        Tabellenkalk