tag:forum.selfhtml.org,2005:/self JavaScript Proposal: do-Expresssions – SELFHTML-Forum 2017-12-13T14:19:54Z https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709746?srt=yes#m1709746 1unitedpower 2017-12-08T20:10:51Z 2017-12-08T20:12:32Z JavaScript Proposal: do-Expresssions <p>Moin!</p> <p>Dem JavaScript-Standardkomittee liegt ein neues Proposal vor: do-Expressions ummanteln Statements und geben den finalen Wert der Berechnung zurück. Für mich persönlich ist das eines der größten Highlights seit Anbeginn der JavaScript-Epoche.</p> <pre><code class="block language-js"><span class="token keyword">const</span> salutation <span class="token operator">=</span> <span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span>animal<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token literal-property property">dog</span><span class="token operator">:</span> <span class="token string">'good boy'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token literal-property property">kitty</span><span class="token operator">:</span> <span class="token string">'meow'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token literal-property property">goose</span><span class="token operator">:</span> <span class="token string">'muuuuuuh'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <p>Der verlinkte Blog-Beitrag enthält deutlich bessere Beispiele als mein dummes Greeter-Script. Potenzielle Anwendungsfälle für do-Expressions sind Template-Literale, JSX-Templates und Alternativen zu IIFEs und zum Ternären Operator.</p> <p>Wie so oft, kann man das Feature bereits heute nutzen, wenn man Babel als Precompiler einsetzt. Bis das Feature allerdings standadisiert ist, können wie immer noch Änderungen an Syntax und Semantik anfallen.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709748?srt=yes#m1709748 Orlok 2017-12-09T00:49:36Z 2017-12-09T10:04:12Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower</p> <p>Ich teile deine Begeisterung über den Vorschlag für do-Expressions größtenteils und füge mal den <a href="https://github.com/tc39/proposal-do-expressions" rel="noopener noreferrer">Link zum Proposal</a> 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.</p> <p>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.</p> <p>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.</p> <p>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.</p> <pre><code class="block language-elixir"><span class="token comment"># Expression for a single condition</span> value <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">do</span> <span class="token string">"done this"</span> <span class="token keyword">else</span> <span class="token string">"done that"</span> <span class="token keyword">end</span> <span class="token comment"># Expression for multiple conditions</span> result <span class="token operator">=</span> <span class="token keyword">cond</span> <span class="token keyword">do</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">-></span> <span class="token string">"greater than 10"</span> <span class="token comment"># EDIT:</span> <span class="token comment"># Gunnar hat natürlich recht,</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">-></span> <span class="token comment"># das sollte in umgekehrter</span> <span class="token string">"greater than 20"</span> <span class="token comment"># Reihenfolge geprüft werden. ;-)</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">-></span> <span class="token string">"greater than 30"</span> <span class="token keyword">end</span> </code></pre> <p>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.</p> <pre><code class="block language-rust"><span class="token comment">// Conditional expression</span> <span class="token keyword">let</span> value <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token punctuation">{</span> <span class="token string">"done this"</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token string">"done that"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <p>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.</p> <p>Gruß,</p> <p>Orlok</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709752?srt=yes#m1709752 pl 2017-12-09T07:52:14Z 2017-12-09T14:43:37Z JavaScript Proposal: do-Expresssions <p>Ja, schön. Ich arbeite schon lange und sehr viel damit, es ist ganz einfach zweckmäßig. U.a. auch hierbei: <code>x = y == z ? a : do{..}; </code> MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709753?srt=yes#m1709753 dedlfix 2017-12-09T08:07:51Z 2017-12-09T08:07:51Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <p>Dem JavaScript-Standardkomittee liegt ein neues Proposal vor: do-Expressions ummanteln Statements und geben den finalen Wert der Berechnung zurück. Für mich persönlich ist das eines der größten Highlights seit Anbeginn der JavaScript-Epoche.</p> </blockquote> <p>Ich finde es gut, wenn ihr euch darüber begeistern könnt. Für meinen Teil betrachte ich die Sache mit dem Nutzen im Hinterkopf, denn ich davon haben kann. Der Erfolg einer Sprache hängt nicht unbedingt davon ab, was aus akademischer Sicht die Sprache in Richtung eines bestimmten Paradigmas bewegt, sondern was man im täglichen (Berufs)leben davon hat. Typescript beispielsweise ist so erfolgreich, weil es die Sprache um Dinge erweitert, die einen großen praktischen Nutzen haben. Dabei bleibt die eigentlichen Sprache weitgehend erhalten, es kommen keine außergewöhnlichen Elemente hinzu (mit der C#-Brille auf der Nase).</p> <blockquote> <pre><code class="block language-js"><span class="token keyword">const</span> salutation <span class="token operator">=</span> <span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span>animal<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token literal-property property">dog</span><span class="token operator">:</span> <span class="token string">'good boy'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token literal-property property">kitty</span><span class="token operator">:</span> <span class="token string">'meow'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token literal-property property">goose</span><span class="token operator">:</span> <span class="token string">'muuuuuuh'</span><span class="token punctuation">;</span> <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Das kann ich heutzutage auch schon als Ausdruck haben.</p> <pre><code class="block language-javascript"><span class="token keyword">const</span> animal <span class="token operator">=</span> <span class="token string">'monkey'</span><span class="token punctuation">;</span> <span class="token keyword">const</span> salutation <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">dog</span><span class="token operator">:</span> <span class="token string">'good boy'</span><span class="token punctuation">,</span> <span class="token literal-property property">kitty</span><span class="token operator">:</span> <span class="token string">'meow'</span><span class="token punctuation">,</span> <span class="token literal-property property">goose</span><span class="token operator">:</span> <span class="token string">'muuuuuuh'</span> <span class="token punctuation">}</span><span class="token punctuation">[</span>animal<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token string">'hi'</span><span class="token punctuation">;</span> </code></pre> <p>Zumindest in der kurzen Form des Beispiels. Es geht so nicht mit falsy Werten, aber die hat man selten in solchen Anwendungsfällen. Komplexe Ausdrücke jedoch, die erst zur Laufzeit berechnet werden, gehen damit, wenn man eine Funktionsreferenz zurückgibt, die man dann aufruft.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709754?srt=yes#m1709754 pl 2017-12-09T08:56:28Z 2017-12-09T08:56:28Z JavaScript Proposal: do-Expresssions <p>Der Sinn und die Zweckmäßigkeit solcher do{}-Böcke besteht hauptsächlich darin, mehrere Anweisungen zusamenzufassen, so daß effektiv nur eine Anweisung übrigbleibt. Gerade am Beispiel des Ternären Operator wird das deutlich, d.h., man würde solche Konstrukte wohl eher weniger verwenden, wenn es den do{}-Block nicht gäbe. Mich wunderts, daß man in Deiner verlinkten Seite nun gerade darauf gar nicht weiter eingeht. Da gehts wohl eher um andere Dinge </p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709799?srt=yes#m1709799 Tabellenkalk 2017-12-10T08:17:29Z 2017-12-10T08:17:29Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>do-Expressions ummanteln Statements und geben den finalen Wert der Berechnung zurück.</p> </blockquote> <p>Kann es sein, dass das ein wenig von LISP abgeguckt ist?</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709749?srt=yes#m1709749 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T05:24:28Z 2017-12-09T05:33:28Z JavaScript Proposal: do-Expresssions <p>@@Orlok</p> <blockquote> <p>Könnte man in JavaScript Code ähnlich diesem Elixir-Beispiel schreiben</p> </blockquote> <p>Kann man doch.</p> <blockquote> <pre><code class="block language-elixir"><span class="token comment"># Expression for a single condition</span> value <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">do</span> <span class="token string">"done this"</span> <span class="token keyword">else</span> <span class="token string">"done that"</span> <span class="token keyword">end</span> </code></pre> </blockquote> <pre><code class="block language-javascript">value <span class="token operator">=</span> condition <span class="token operator">?</span> <span class="token string">"done this"</span> <span class="token operator">:</span> <span class="token string">"done that"</span><span class="token punctuation">;</span> </code></pre> <blockquote> <pre><code class="block language-elixir"><span class="token comment"># Expression for multiple conditions</span> result <span class="token operator">=</span> <span class="token keyword">cond</span> <span class="token keyword">do</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">-></span> <span class="token string">"greater than 10"</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">-></span> <span class="token string">"greater than 20"</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">-></span> <span class="token string">"greater than 30"</span> <span class="token keyword">end</span> </code></pre> </blockquote> <pre><code class="block language-javascript">result <span class="token operator">=</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">?</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">?</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">?</span> <span class="token string">"greater than 30"</span> <span class="token operator">:</span> <span class="token string">"greater than 20"</span> <span class="token operator">:</span> <span class="token string">"greater than 10"</span> <span class="token operator">:</span> result<span class="token punctuation">;</span> </code></pre> <p>Wobei da zur besseren Lesbarkeit Klammern gesetzt werden sollten.</p> <p>Und die Bedingungen auch besser andersrum, dann braucht man keine Klammern:</p> <pre><code class="block language-javascript">result <span class="token operator">=</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">?</span> <span class="token string">"greater than 30"</span> <span class="token operator">:</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">?</span> <span class="token string">"greater than 20"</span> <span class="token operator">:</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">?</span> <span class="token string">"greater than 10"</span> <span class="token operator">:</span> result<span class="token punctuation">;</span> </code></pre> <p>Nachtrag: Oder man schreibt das mehrzeilig, dann braucht man auch keine Klammern:</p> <pre><code class="block language-javascript">result <span class="token operator">=</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">?</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">?</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">?</span> <span class="token string">"greater than 30"</span> <span class="token operator">:</span> <span class="token string">"greater than 20"</span> <span class="token operator">:</span> <span class="token string">"greater than 10"</span> <span class="token operator">:</span> result<span class="token punctuation">;</span> </code></pre> <p>bzw.</p> <pre><code class="block language-javascript">result <span class="token operator">=</span> number <span class="token operator">></span> <span class="token number">30</span> <span class="token operator">?</span> <span class="token string">"greater than 30"</span> <span class="token operator">:</span> number <span class="token operator">></span> <span class="token number">20</span> <span class="token operator">?</span> <span class="token string">"greater than 20"</span> <span class="token operator">:</span> number <span class="token operator">></span> <span class="token number">10</span> <span class="token operator">?</span> <span class="token string">"greater than 10"</span> <span class="token operator">:</span> result<span class="token punctuation">;</span> </code></pre> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709875?srt=yes#m1709875 Christian Kruse https://wwwtech.de/about 2017-12-11T13:48:23Z 2017-12-11T13:48:23Z JavaScript Proposal: do-Expresssions <p>Hallo Gunnar,</p> <blockquote> <blockquote> <p>Könnte man in JavaScript Code ähnlich diesem Elixir-Beispiel schreiben</p> </blockquote> <p>Kann man doch.</p> </blockquote> <p>Deine Beispiele weiter unten zeigen, dass man genau das nicht kann </p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709772?srt=yes#m1709772 pl 2017-12-09T13:53:51Z 2017-12-09T13:58:18Z JavaScript Proposal: do-Expresssions <blockquote> <p>Ja, schön. Ich arbeite schon lange und sehr viel damit, es ist ganz einfach zweckmäßig. U.a. auch hierbei: <code>x = y == z ? a : do{..}; </code> MfG</p> </blockquote> <p>Wenn Ihr mir hier schon Perl draus macht, mal ein etwas ausführlicheres Beispiel zu do{}:</p> <pre><code class="block language-perl"> <span class="token keyword">if</span><span class="token punctuation">(</span> <span class="token keyword">my</span> <span class="token variable">$keyword</span> <span class="token operator">=</span> <span class="token variable">$self</span><span class="token operator">-></span>param<span class="token punctuation">(</span><span class="token string">'fetch'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span> <span class="token variable">$keyword</span> <span class="token operator">eq</span> <span class="token string">'img'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>CONTENT<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">do</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$fh</span> <span class="token operator">=</span> IO<span class="token punctuation">:</span><span class="token punctuation">:</span>File<span class="token operator">-></span>new<span class="token punctuation">;</span> <span class="token variable">$fh</span><span class="token operator">-></span>open<span class="token punctuation">(</span> <span class="token string">"$ENV{DOCUMENT_ROOT}/red.gif"</span><span class="token punctuation">,</span> O_BINARY<span class="token operator">|</span>O_RDONLY<span class="token punctuation">)</span> <span class="token operator">or</span> <span class="token keyword">die</span> <span class="token string">"Fehler beim Lesen der Grafikdatei: $!\n"</span><span class="token punctuation">;</span> read<span class="token punctuation">(</span><span class="token variable">$fh</span><span class="token punctuation">,</span> <span class="token keyword">my</span> <span class="token variable">$bin</span><span class="token punctuation">,</span> <span class="token operator">-s</span> <span class="token variable">$fh</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$fh</span><span class="token operator">-></span>close<span class="token punctuation">;</span> <span class="token variable">$bin</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span><span class="token punctuation">{</span> <span class="token comment"># DEMO </span> <span class="token keyword">die</span> <span class="token string">"Beim Lesen der Grafikdatei gab es einen Fehler!\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Oder wenn mal eben vorher noch was berechnet werden muss:</p> <p><code>2 => do{$year--; "31.12.$year"}</code></p> <p>MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709777?srt=yes#m1709777 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T14:49:26Z 2017-12-09T14:49:26Z JavaScript Proposal: do-Expresssions <p>@@pl</p> <blockquote> <p>Ja, schön. Ich arbeite schon lange und sehr viel damit, es ist ganz einfach zweckmäßig. U.a. auch hierbei: <code>x = y == z ? a : do{..}; </code> MfG</p> </blockquote> <p><code>do</code>-Expressions sollen doch eine Alternative zum mitunter umständlich handhabbaren <code>?:</code>-Operator sein. Welchen Sinn macht es, beides gemeinsam zu verwenden?</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709755?srt=yes#m1709755 1unitedpower 2017-12-09T09:02:55Z 2017-12-09T09:02:55Z JavaScript Proposal: do-Expresssions <blockquote> <p>Das kann ich heutzutage auch schon als Ausdruck haben.</p> <pre><code class="block language-javascript"><span class="token keyword">const</span> animal <span class="token operator">=</span> <span class="token string">'monkey'</span><span class="token punctuation">;</span> <span class="token keyword">const</span> salutation <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">dog</span><span class="token operator">:</span> <span class="token string">'good boy'</span><span class="token punctuation">,</span> <span class="token literal-property property">kitty</span><span class="token operator">:</span> <span class="token string">'meow'</span><span class="token punctuation">,</span> <span class="token literal-property property">goose</span><span class="token operator">:</span> <span class="token string">'muuuuuuh'</span> <span class="token punctuation">}</span><span class="token punctuation">[</span>animal<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token string">'hi'</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Stimme dir absolut zu, und dein Beispiel ist obendrauf auch noch besser lesbar. Mein Beispiel ist zugegebenermaßen recht pathologisch, deswegen auch nochmal der Hinweis auf den Blogbeitrag, der praktischere Beispiele beinhaltet, insbesondere unter der Überschrift <a href="https://medium.freecodecamp.org/a-first-look-do-expressions-in-javascript-de-do-do-do-de-da-da-da-fc87f5fe238a#833b" rel="nofollow noopener noreferrer">Use in JSX</a> wird ein Anwendungsfall geschildert, den du mit bisherigen Bordmitteln wohl nur schwierig nachbauen kannst, ohne dass die Lesbarkeit darunter leidet.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709768?srt=yes#m1709768 Rolf B 2017-12-09T13:11:18Z 2017-12-09T13:11:18Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <p>Das kann ich heutzutage auch schon als Ausdruck haben.</p> <pre><code class="block language-javascript"><span class="token keyword">const</span> animal <span class="token operator">=</span> <span class="token string">'monkey'</span><span class="token punctuation">;</span> <span class="token keyword">const</span> salutation <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">dog</span><span class="token operator">:</span> <span class="token string">'good boy'</span><span class="token punctuation">,</span> <span class="token literal-property property">kitty</span><span class="token operator">:</span> <span class="token string">'meow'</span><span class="token punctuation">,</span> <span class="token literal-property property">goose</span><span class="token operator">:</span> <span class="token string">'muuuuuuh'</span> <span class="token punctuation">}</span><span class="token punctuation">[</span>animal<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token string">'hi'</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Deine Gänse machen mir Angst!</p> <p>Das Thema hatte ich neulich schon mit PL: Das ist NICHT das gleiche wie eine do-Expression oder eine richtig gemachte Ternary-Kette. Im von Dir gezeigten Fall wird ein Objekt erzeugt, dann ein Property davon genutzt und das Objekt schließlich wieder fortgeworfen. Solange die Properties Konstanten sind, ist das nicht allzu teuer. Funktionsreferenzen sind im komplexen Fall natürlich machbar, verlangen aber trotzdem erstmal das Anlegen eines Objekts und auch die Existenz von Funktionen und eine einheitliche Schnittstelle.</p> <p>In den meisten Fällen wird der dadurch entstehende Overhead ohne Bedeutung sein, aber es gibt auch in JavaScript zeitkritische Situationen, vor allem auf Servern (node.js) und wer dann ganz selbstverständlich mit diesen Temp-Objekten agiert, mag sich wundern warum seine JS-App so langsam ist bzw. warum sein Server nur 100 Requests pro Sekunde schafft statt 1000. Ok, ist übertrieben.</p> <p>Sorry, wenn ich auf solchen Dingen rumreite, aber wer in den 80ern das Programmieren angefangen hat, geizt mit jedem Byte und CPU-Taktzyklus </p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709770?srt=yes#m1709770 pl 2017-12-09T13:41:57Z 2017-12-09T13:41:57Z JavaScript Proposal: do-Expresssions <blockquote> <p>Das kann ich heutzutage auch schon als Ausdruck haben.</p> </blockquote> <p>Daß man bestimmte Dinge auch anders machen kann ist hier wohl kaum die Frage weil man die ohnehin fast immer mit JA beantworten kann. Das Entscheidende beim do{}-Block ist, daß das Ergebnis der letzten Anweisung zurückgegeben wird. Und diese Erkenntnis wirkt sich unmittelbar auf den Programmierstil aus. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709757?srt=yes#m1709757 1unitedpower 2017-12-09T09:15:50Z 2017-12-09T09:15:50Z JavaScript Proposal: do-Expresssions <blockquote> <p>Der Sinn und die Zweckmäßigkeit solcher do{}-Böcke besteht hauptsächlich darin, mehrere Anweisungen zusamenzufassen, so daß effektiv nur eine Anweisung übrigbleibt.</p> </blockquote> <p>Jein, Anweisungen zu Blöcken zusammenfassen kannst du auch heute schon in JavaScript:</p> <pre><code class="block language-js"><span class="token punctuation">{</span> <span class="token keyword">const</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token keyword">const</span> c <span class="token operator">=</span> a <span class="token operator">+</span> b<span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Der springende Punkt ist, dass man in JavaScript bisher keine Anweisungsblöcke in Ausdrücke einbetten kann, dafür sind do-Expressions da. Kann gut sein, dass Perl das schon hat, aber einem JavaScript-Programmierer hilft das nicht sonderlich viel.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709758?srt=yes#m1709758 dedlfix 2017-12-09T09:17:59Z 2017-12-09T09:17:59Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <p>Mein Beispiel ist zugegebenermaßen recht pathologisch, deswegen auch nochmal der Hinweis auf den Blogbeitrag, der praktischere Beispiele beinhaltet, insbesondere unter der Überschrift <a href="https://medium.freecodecamp.org/a-first-look-do-expressions-in-javascript-de-do-do-do-de-da-da-da-fc87f5fe238a#833b" rel="nofollow noopener noreferrer">Use in JSX</a> wird ein Anwendungsfall geschildert, den du mit bisherigen Bordmitteln wohl nur schwierig nachbauen kannst, ohne dass die Lesbarkeit darunter leidet.</p> </blockquote> <p>Ich habe zwar keine Ahnung von JSX. Das Prinzip kenne ich aber von C# und dessen Razor-Syntax in ASP.NET MVC.</p> <pre><code class="block language-jsx"><span class="token keyword">const</span> <span class="token function-variable function">View</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> loading<span class="token punctuation">,</span> error<span class="token punctuation">,</span> <span class="token operator">...</span>otherProps <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span><span class="token plain-text"> </span><span class="token punctuation">{</span><span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>loading<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token class-name">Loading</span></span> <span class="token punctuation">/></span></span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token class-name">Error</span></span> <span class="token attr-name">error</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>error<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token class-name">MyLoadedComponent</span></span> <span class="token spread"><span class="token punctuation">{</span><span class="token operator">...</span>otherProps<span class="token punctuation">}</span></span> <span class="token punctuation">/></span></span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token plain-text"> </span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Dabei verstehe ich nicht, warum man das in ein do{} kapseln muss. Wenn man diese Anweisung weglässt, hat man doch bereits, was man möchte. Vielleicht gibt das die Syntax nicht her, aber dann wäre es wohl einfacher, die Syntax dahingehend freizügiger zu gestalten, als ein neues Element einzuführen, das wenig Aussagekraft hat. "do" = "tuen", na klar tut Code immer etwas. Zumindest im Deutschen ist das "tuen" in vielen Fällen, wie beispielsweise "Ich tu mal die Pflanzen gießen", ein verzichtbarer Bestandteil, der im Gegenteil sogar stilistisch eher negativ angesehen wird. Vielleicht haben sich da die English Natives nicht so eng mit ihrem "do".</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709759?srt=yes#m1709759 pl 2017-12-09T09:51:18Z 2017-12-09T09:51:18Z JavaScript Proposal: do-Expresssions <p>Ja, es hilft ungemein weil es eben sehr praktisch ist. Man kann auch sagen, es ermöglicht eine flüssige Schreibweise beim Programmieren, z.b. wenn Anweisungen ternary zu notieren sind und man beim Tippen feststellen muss dass man für eine Zuweisung noch ein bischen mehr tun muss. Das geht sozusagen mit der Zeit und mit der Praxis in Fleisch und Blut über, daß man den Fluß der Tipparbeit eben nicht unterbrechen muss sondern einfach einen do{}-Block einsetzt.</p> <p>Und wenn man von einer anderen PL kommt wo sowas schon immer möglich ist, ganz besonders. Natürlich mus jeder seine Erfahrungen selber machen, da haste schon recht. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709762?srt=yes#m1709762 1unitedpower 2017-12-09T10:59:32Z 2017-12-09T10:59:32Z JavaScript Proposal: do-Expresssions <blockquote> <p>Dabei verstehe ich nicht, warum man das in ein do{} kapseln muss. Wenn man diese Anweisung weglässt, hat man doch bereits, was man möchte. Vielleicht gibt das die Syntax nicht her</p> </blockquote> <p>So ist es, die JSX-Syntax erlaubt in den geschweiften Klammern nur JS-Ausdrücke, keine Statements.</p> <blockquote> <p>aber dann wäre es wohl einfacher, die Syntax dahingehend freizügiger zu gestalten, als ein neues Element einzuführen, das wenig Aussagekraft hat.</p> </blockquote> <p>Das hat @Orlok ja auch schon angemerkt, ich stimme auch zu, dass das für den Programmierer noch angenehmer wäre. Ich glaube aber auch, es würde nicht reichen die existierenden JavaScript-Statements zu Ausdrücken umzudefinieren, stattdessen müsste man wohl für jedes vorhandene Statement einen korrespondierenden Ausdruck einführen. Das wären viel tiefgreifendere Anpassungen an Syntax und Semantik. Ich kann mir daher eher vorstellen, dass man in einem nächsten Schritt <code>if</code>-Ausdrücke als syntaktischen Zucker über <code>do</code>-Expressions spezifiziert. Das würde den gleichen Komfort für den Programmierer bieten und gleichzeitig die Semantik der Sprache nicht so sehr beeinflussen.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709764?srt=yes#m1709764 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T11:51:36Z 2017-12-09T11:51:36Z JavaScript Proposal: do-Expresssions <p>@@dedlfix</p> <blockquote> <p>ein verzichtbarer Bestandteil, der im Gegenteil sogar stilistisch eher negativ angesehen wird. Vielleicht haben sich da die English Natives nicht so eng mit ihrem "do".</p> </blockquote> <p>Besonders nicht bei der Verneinung. Oder bei der Befragung. <em lang="en">Don’t you agree?</em></p> <p>Aber auch bei bejahenden Statements (um in der Terminologie des Threads zu bleiben) kann „<em lang="en">do</em>“ eingefügt werden, um dem Ganzen mehr Ausdruckskraft zu verleihen. <em lang="en">I really do believe so.</em></p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709763?srt=yes#m1709763 1unitedpower 2017-12-09T11:15:38Z 2017-12-09T11:15:38Z JavaScript Proposal: do-Expresssions <blockquote> <p>Ich kann mir daher eher vorstellen, dass man in einem nächsten Schritt <code>if</code>-Ausdrücke als syntaktischen Zucker über <code>do</code>-Expressions spezifiziert. Das würde den gleichen Komfort für den Programmierer bieten und gleichzeitig die Semantik der Sprache nicht so sehr beeinflussen.</p> </blockquote> <p>Auf der Diskussionsseite des Proposals wird das auch schon in Erwägung gezogen: <a href="https://github.com/tc39/proposal-do-expressions/issues/9" rel="noopener noreferrer">https://github.com/tc39/proposal-do-expressions/issues/9</a></p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709773?srt=yes#m1709773 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T14:09:11Z 2017-12-09T14:09:11Z JavaScript Proposal: do-Expresssions <p>@@Gunnar Bittersmann</p> <blockquote> <p>Aber auch bei bejahenden Statements (um in der Terminologie des Threads zu bleiben) kann „<em lang="en">do</em>“ eingefügt werden, um dem Ganzen mehr Ausdruckskraft zu verleihen.</p> </blockquote> <p>Spotted <a href="https://www.youtube.com/watch?v=IChJ6eO3k48" rel="nofollow noopener noreferrer">in the wild</a>: <em>“Simon does bite.”</em> </p> <p>Und großartige Performance, IMHO.</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709787?srt=yes#m1709787 dedlfix 2017-12-09T22:14:26Z 2017-12-09T22:14:26Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <p>Aber auch bei bejahenden Statements (um in der Terminologie des Threads zu bleiben) kann „<em lang="en">do</em>“ eingefügt werden, um dem Ganzen mehr Ausdruckskraft zu verleihen. <em lang="en">I really do believe so.</em></p> </blockquote> <p>Ja, diese Art von Betonung gibt es. Aber ist sie logisch sinnvoll oder einfach nur ein im Grunde überflüssiges Sprachkonstrukt? Oder anders gefragt, muss ich einem Computer betonen, dass er was auszuführen hat?</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709769?srt=yes#m1709769 1unitedpower 2017-12-09T13:31:38Z 2017-12-09T13:32:13Z JavaScript Proposal: do-Expresssions <blockquote> <p>In den meisten Fällen wird der dadurch entstehende Overhead ohne Bedeutung sein</p> </blockquote> <p>JavaScript-Engines sind extrem gut darin solche Dinge wegzuoptimieren. Ich habe das mal durch <a href="https://prepack.io/repl.html" rel="nofollow noopener noreferrer">Prepack</a> gejagt, einem partiellen JavaScript-Interpreter, der macht daraus den folgenden Einzeiler:</p> <pre><code class="block language-js">salutation <span class="token operator">=</span> <span class="token string">'hi'</span><span class="token punctuation">;</span> </code></pre> <p>Die Zeit für manuelle Optimierungen ist erst gekommen, wenn es schon zu spät ist. Dann kann man gezielt nach Engpässen suchen und effektiv optimieren. Optimistisch im Voraus handanzulegen und zu hoffen, dass man am Ende effizienten Code hat, ist dagegen eher aussichtslos, wie groß ist schon die Chance, dass man auf diese Weise die wirklich großen Flaschenhälse tatsächlich erwischt? Oft schadet das einach nur der Lesbarkeit und Wartbarkeit des Codes und ist am Ende doch nur vergebliche Liebesmühe.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709872?srt=yes#m1709872 Christian Kruse https://wwwtech.de/about 2017-12-11T13:41:19Z 2017-12-11T13:41:19Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower,</p> <blockquote> <p>Optimistisch im Voraus handanzulegen und zu hoffen, dass man am Ende effizienten Code hat, ist dagegen eher aussichtslos, wie groß ist schon die Chance, dass man auf diese Weise die wirklich großen Flaschenhälse tatsächlich erwischt? Oft schadet das einach nur der Lesbarkeit und Wartbarkeit des Codes und ist am Ende doch nur vergebliche Liebesmühe.</p> </blockquote> <p>Richtig. Erstes Grundprinzip der Programmierung: „Make it correct. Make it clear. Make it concise. Make it fast. In that order.”</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709788?srt=yes#m1709788 dedlfix 2017-12-09T22:28:33Z 2017-12-09T22:28:33Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <blockquote> <p>Das kann ich heutzutage auch schon als Ausdruck haben.</p> </blockquote> <p>Daß man bestimmte Dinge auch anders machen kann ist hier wohl kaum die Frage weil man die ohnehin fast immer mit JA beantworten kann.</p> </blockquote> <p>Ja, aber lassen wir mal diese konkrete Antwort auf dieses konkrete Beispiel beiseite und gehen wieder ins allgemeine zurück.</p> <blockquote> <p>Das Entscheidende beim do{}-Block ist, daß das Ergebnis der letzten Anweisung zurückgegeben wird. Und diese Erkenntnis wirkt sich unmittelbar auf den Programmierstil aus.</p> </blockquote> <p>Eine kleine Abschweifung vorangestellt: Es gab in Pascal die Unterschiedung zwischen Prozedur und Funktion. In anderen Sprachen ist das Äquivalent der Prozedur eine Funktion ohne oder mit void als Rückgabewert. Es braucht also kein separates Sprachkonstrukt der Prozedur, wenn man dasselbe genausogut mit einer etwas erweiterten Funktion erreichen kann. Insofern sehe ich auch keinen Grund dafür, ein do-Element in die Sprache einzufügen, wenn man stattdessen das if (und case und for usw.) so erweitern kann, dass dessen letzter Ausdruck ein Rückgabewert wird.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709774?srt=yes#m1709774 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T14:24:38Z 2017-12-09T14:24:38Z JavaScript Proposal: do-Expresssions <p>@@pl</p> <blockquote> <p>Wenn Ihr mir hier schon Perl draus macht</p> </blockquote> <p>Ihr? Warst du es nicht, der die Kategorie auf Perl gesetzt hat? (Ich kann keine Änderungshistorie erkennen.)</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709779?srt=yes#m1709779 pl 2017-12-09T15:17:21Z 2017-12-09T15:17:21Z JavaScript Proposal: do-Expresssions <p>Wenn mich eine Stimme fertigmacht dann die von <a href="https://www.youtube.com/watch?v=wmG24mOWZoo" rel="nofollow noopener noreferrer">Christine McVie</a> und <a href="https://www.youtube.com/watch?v=mI8z-NQkk08" rel="nofollow noopener noreferrer">Camille</a> </p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709775?srt=yes#m1709775 pl 2017-12-09T14:39:57Z 2017-12-09T14:39:57Z JavaScript Proposal: do-Expresssions <blockquote> <blockquote> <p>Wenn Ihr mir hier schon Perl draus macht</p> </blockquote> <p>Ihr? Warst du es nicht, der die Kategorie auf Perl gesetzt hat? (Ich kann keine Änderungshistorie erkennen.)</p> </blockquote> <p>Nein warum sollte ich, wenn ich ein JS Beispiel poste. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709776?srt=yes#m1709776 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T14:47:24Z 2017-12-09T14:50:08Z JavaScript Proposal: do-Expresssions <p>@@pl</p> <blockquote> <blockquote> <p>Ihr? Warst du es nicht, der die Kategorie auf Perl gesetzt hat? (Ich kann keine Änderungshistorie erkennen.)</p> </blockquote> <p>Nein warum sollte ich, wenn ich ein JS Beispiel poste. MfG</p> </blockquote> <p>Ich hab das dann mal auf JavaScript zurückgesetzt. Und tatsächlich, Änderungen der Kategorie werden nicht in einer Änderungshistorie kenntlich gemacht.</p> <p>Aber wenn das JavaScript-Code sein sollte, dann hab ich doch noch eine Frage dazu. Aber <a href="https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709777#m1709777" rel="noopener noreferrer">an Ort und Stelle…</a></p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709789?srt=yes#m1709789 dedlfix 2017-12-09T22:32:34Z 2017-12-09T22:32:34Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <blockquote> <blockquote> <p>Wenn Ihr mir hier schon Perl draus macht</p> </blockquote> <p>Ihr? Warst du es nicht, der die Kategorie auf Perl gesetzt hat? (Ich kann keine Änderungshistorie erkennen.)</p> </blockquote> <p>Nein warum sollte ich, wenn ich ein JS Beispiel poste.</p> </blockquote> <p>Ich hab die Kategorie geändert. Wie soll das ein Beispiel in Javascript sein, das du angeblich schon lange verwendest, wenn es grad mal in der Diskussion ist, sowas in die Sprache aufzunehmen? Deswegen nahm ich an, du beziehst sich mal wieder vom Thema abschweifend auf irgendwas in Perl.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709783?srt=yes#m1709783 Matthias Apsel matthias.apsel@selfhtml.org http://brückentage.info 2017-12-09T15:44:24Z 2017-12-09T15:44:24Z JavaScript Proposal: do-Expresssions <p>Hallo Gunnar Bittersmann,</p> <blockquote> <p>Ich hab das dann mal auf JavaScript zurückgesetzt. Und tatsächlich, Änderungen der Kategorie werden nicht in einer Änderungshistorie kenntlich gemacht.</p> </blockquote> <p>Zumindest nicht öffentlich. Für fraglichen Beitrag (<a href="https://forum.selfhtml.org/m1709752" rel="noopener noreferrer">m1709752</a>) wurden bisher genau zweimal die Tags geändert. Die konkrete Änderung wird allerdings nicht protokolliert.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709778?srt=yes#m1709778 pl 2017-12-09T15:06:55Z 2017-12-09T15:06:55Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <p><code>do</code>-Expressions sollen doch eine Alternative zum mitunter umständlich handhabbaren <code>?:</code>-Operator sein.</p> </blockquote> <p>Wie kommst Du denn darauf? Das Eine hat doch mit dem Anderen nichts zu tun.</p> <blockquote> <p>Welchen Sinn macht es, beides gemeinsam zu verwenden?</p> </blockquote> <p>Nun, eine ternary Zuweisung macht den Code kürzer, weil die Bedingung gleich mitgegeben ist. Also entfällt auch eine vorherige Deklaration per Schlüsselwort (var, const..), weil das ebenso gleich mit der Zuweisung erledigt wird. Und in einem do{}-Block schließlich kann man weitere Codezeilen unterbringen, bspw. zur Berechnung eines bestimmten Wertes, der, damit das funktioniert, in der letzten Zeile des do{}-Block stehen muss:</p> <pre><code class="block language-js"><span class="token keyword">var</span> x <span class="token operator">=</span> x <span class="token operator">===</span> <span class="token number">1</span> <span class="token operator">?</span> x <span class="token operator">:</span> <span class="token keyword">do</span><span class="token punctuation">{</span> <span class="token keyword">var</span> y <span class="token operator">=</span> x <span class="token operator">*</span> <span class="token number">99</span><span class="token punctuation">;</span> <span class="token keyword">var</span> z <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">*</span> x<span class="token punctuation">;</span> y <span class="token operator">+</span> z <span class="token operator">>>></span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <p>MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709782?srt=yes#m1709782 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-09T15:40:42Z 2017-12-09T15:40:42Z JavaScript Proposal: do-Expresssions <p>@@pl</p> <blockquote> <blockquote> <p><code>do</code>-Expressions sollen doch eine Alternative zum mitunter umständlich handhabbaren <code>?:</code>-Operator sein.</p> </blockquote> <p>Wie kommst Du denn darauf?</p> </blockquote> <ol> <li> <p>Im <a href="https://medium.freecodecamp.org/a-first-look-do-expressions-in-javascript-de-do-do-do-de-da-da-da-fc87f5fe238a" rel="nofollow noopener noreferrer">verlinkten Artikel</a> unter „<em lang="en">What is ternary hell?</em>“. (Abschnitt lässt sich nicht verlinken. Saubere Arbeit, freeCodeCamp. Nicht.)</p> </li> <li> <p>„<em lang="en">instead of awkward nested ternaries</em>“ im ebenfalls verlinkten <a href="https://github.com/tc39/proposal-do-expressions" lang="en" rel="noopener noreferrer">Proposal</a></p> </li> </ol> <blockquote> <p>Das Eine hat doch mit dem Anderen nichts zu tun.</p> </blockquote> <p>Ach, nein?</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709784?srt=yes#m1709784 pl 2017-12-09T16:03:28Z 2017-12-09T16:03:28Z JavaScript Proposal: do-Expresssions <p>hi,</p> <blockquote> <blockquote> <p>Das Eine hat doch mit dem Anderen nichts zu tun.</p> </blockquote> <p>Ach, nein?</p> </blockquote> <p>Nein. Man kann jedoch beides auf eine zweckmäßige Art und Weise verbinden, siehe meine Beispiele und die sind aus der Perl-Praxis. Und die sind das deswegen weil in JavaScript noch keine Erfahrungen mit do{}-Blöcken vorliegen.</p> <p>Auf das <a href="https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709746#m1709746" rel="noopener noreferrer">Wesentliche</a> kommt es an: do-Expressions ummanteln Statements und geben den finalen Wert der Berechnung zurück. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709792?srt=yes#m1709792 pl 2017-12-10T07:30:34Z 2017-12-10T07:30:34Z JavaScript Proposal: do-Expresssions <p>Moin,</p> <blockquote> <p>Insofern sehe ich auch keinen Grund dafür, ein do-Element in die Sprache einzufügen, wenn man stattdessen das if (und case und for usw.) so erweitern kann, dass dessen letzter Ausdruck ein Rückgabewert wird.</p> </blockquote> <p>if() hat keinen Rückgabewert sondern wertet einen Ausdruck aus. Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen? MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709870?srt=yes#m1709870 Christian Kruse https://wwwtech.de/about 2017-12-11T13:38:22Z 2017-12-11T13:38:22Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <p>Es braucht also kein separates Sprachkonstrukt der Prozedur, wenn man dasselbe genausogut mit einer etwas erweiterten Funktion erreichen kann. Insofern sehe ich auch keinen Grund dafür, ein do-Element in die Sprache einzufügen, wenn man stattdessen das if (und case und for usw.) so erweitern kann, dass dessen letzter Ausdruck ein Rückgabewert wird.</p> </blockquote> <p>Rückwärtskompatibilität.</p> <p>Eine <code>do</code>-Expression kannst du einführen, ohne, dass du potentiell das halbe Internet kaputt machst. Wenn du jetzt anfängst, JS funktionaler zu machen und Kontrollstrukturen einen Wert zurück geben lässt, dann brichst du potentiell existierende Codebases. Die <code>do</code>-Expression ist also ein Kompromiss: mehr funktionales JS, aber trotzdem kein kaputter Code.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709793?srt=yes#m1709793 pl 2017-12-10T07:33:38Z 2017-12-10T07:38:09Z JavaScript Proposal: do-Expresssions <blockquote> <p>Deswegen nahm ich an, du beziehst sich mal wieder vom Thema abschweifend auf irgendwas in Perl.</p> </blockquote> <p>Natürlich gebe ich auch meine Erfahrungen die ich in JS mache gerne weiter. Wie DU das persönlich bewertest ist Deine Sache, aber wenn DU eine Kategorie änderst ist das nicht mehr Deine Sache. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709796?srt=yes#m1709796 dedlfix 2017-12-10T08:06:31Z 2017-12-10T08:06:31Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <blockquote> <p>Insofern sehe ich auch keinen Grund dafür, ein do-Element in die Sprache einzufügen, wenn man stattdessen das if (und case und for usw.) so erweitern kann, dass dessen letzter Ausdruck ein Rückgabewert wird.</p> </blockquote> <p>if() hat keinen Rückgabewert sondern wertet einen Ausdruck aus.</p> </blockquote> <p>Das weiß ich. Mein Vorschlag ist ja, das Verhalten dahingehend zu ändern, dass es einen Rückgabewert bekommt, um sich die Einführung des do{} sparen zu können.</p> <blockquote> <p>Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen?</p> </blockquote> <p>Es ist irrelevant, ob es so etwas bereits anderwo gibt. Das ist kein Kriterium ob das in Javascript eingeführt werden kann oder sollte.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709798?srt=yes#m1709798 Tabellenkalk 2017-12-10T08:15:31Z 2017-12-10T08:15:31Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p><code>x = if(expr){}</code></p> </blockquote> <p>sieht dann natürlich syntaktisch anders aus, aber Sprachen wie LISP u.Ä., in denen <em>jeder</em> Ausdruck zu einem Resultat ausgewertet wird, machen das so.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709803?srt=yes#m1709803 1unitedpower 2017-12-10T11:02:10Z 2017-12-10T11:02:10Z JavaScript Proposal: do-Expresssions <blockquote> <p>Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen?</p> </blockquote> <p>Klar, das ist weit verbreitet:</p> <ul> <li>Ruby: <code class="language-ruby">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar <span class="token keyword">end</span></code></li> <li>Haskell: <code class="language-haskell"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>Rust: <code class="language-rust">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token punctuation">{</span> foo <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> bar <span class="token punctuation">}</span></code></li> <li>Python: <code class="language-python">x <span class="token operator">=</span> foo <span class="token keyword">if</span> condition <span class="token keyword">else</span> bar</code></li> <li>Elm: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>PureScript: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>OCaml: <code class="language-ocaml">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>F#: <code class="language-fsharp">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>…</li> </ul> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709794?srt=yes#m1709794 Tabellenkalk 2017-12-10T07:52:02Z 2017-12-10T07:52:02Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Natürlich gebe ich auch meine Erfahrungen [...] gerne weiter.</p> </blockquote> <p>Das ist gut so, dafür ist ja dieses Forum da. Es wäre dann aber auch hilfreich, die gestellten Fragen zu beantworten.</p> <blockquote> <p>[Palaver]</p> </blockquote> <p>Palaver ist dagegen so gar nicht hilfreich.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709797?srt=yes#m1709797 pl 2017-12-10T08:13:21Z 2017-12-10T08:13:21Z JavaScript Proposal: do-Expresssions <p>Moin,</p> <blockquote> <blockquote> <p>Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen?</p> </blockquote> <p>Es ist irrelevant, ob es so etwas bereits anderwo gibt. Das ist kein Kriterium ob das in Javascript eingeführt werden kann oder sollte.</p> </blockquote> <p>Nun, wenn Du if mit do vergleichen willst, ist das schon relevant. Im Übrigen wertet do{} keinen Ausdruck aus im Gegensatz zu if(). MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709800?srt=yes#m1709800 pl 2017-12-10T08:27:25Z 2017-12-10T08:42:41Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <blockquote> <p><code>x = if(expr){}</code></p> </blockquote> <p>sieht dann natürlich syntaktisch anders aus, aber Sprachen wie LISP u.Ä., in denen <em>jeder</em> Ausdruck zu einem Resultat ausgewertet wird, machen das so.</p> </blockquote> <p>Das macht im Grunde genommen jede Programmiersprache: Jede Anweisung wird als Wahr oder Falsch bewertet. D.h., daß jede Anweisung einen wahren Wert ergeben muss sonst evaluiert der Code nicht. So ist <code>x=false;</code> eine wahre Aussage, aber der Wert in x ist nicht wahr. <code>x=false;</code> Wird also bewertet obwohl es kein Ausdruck sondern eine Zuweisung ist. MfG</p> <p>PS: Kurz gesagt muss in jeder Zeile was Wahres stehen.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709858?srt=yes#m1709858 pl 2017-12-11T10:18:02Z 2017-12-11T10:18:02Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <blockquote> <p>do-Expressions ummanteln Statements und geben den finalen Wert der Berechnung zurück.</p> </blockquote> <p>Kann es sein, dass das ein wenig von LISP abgeguckt ist?</p> </blockquote> <p>Das interessiert mich auch! Was do{}-Blöcke in Perl machen steht <a href="http://rolfrost.de/perldoc.html?f=do" rel="nofollow noopener noreferrer">hier</a> und siehe auch meine zahlreichen Beispiele hier. In JS würde ich do ganz genauso verwenden weil es sehr praktisch ist, aber das schrieb ich ja bereits.</p> <p>Welche Erfahrungen hast Du mit do{} in LISP?</p> <p>MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709846?srt=yes#m1709846 Schnabeltier 2017-12-11T09:07:07Z 2017-12-11T09:07:07Z JavaScript Proposal: do-Expresssions <p>Welch hanebüchener Mumpitz. Du schmeißt hier wahr und syntaktisch korrekt durcheinander.</p> <p>Dir ist schon klar, dass <code>false</code> eine syntaktisch korrekte Zeile** in Javascript ist, die auch problemlos evaluiert, oder? Magst du bei der immer noch behaupten, sie ergäbe 'wahr', also true?</p> <p>Grüße vom Schnabeltier</p> <p>** Zeile und Statement schmeißt du auch durcheinander, das ist in den meisten Sprachen nicht das selbe.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709804?srt=yes#m1709804 pl 2017-12-10T11:10:41Z 2017-12-10T11:10:41Z JavaScript Proposal: do-Expresssions <blockquote> <blockquote> <p>Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen?</p> </blockquote> <p>Klar, das ist weit verbreitet:</p> <ul> <li>Ruby: <code class="language-ruby">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar <span class="token keyword">end</span></code></li> <li>Haskell: <code class="language-haskell"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>Rust: <code class="language-rust">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token punctuation">{</span> foo <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> bar <span class="token punctuation">}</span></code></li> <li>Python: <code class="language-python">x <span class="token operator">=</span> foo <span class="token keyword">if</span> condition <span class="token keyword">else</span> bar</code></li> <li>Elm: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>PureScript: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>OCaml: <code class="language-ocaml">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>F#: <code class="language-fsharp">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>…</li> </ul> </blockquote> <p>Was Du hier zitierst sind bedingte Zuweisungen, aber deswegen hat <code>if()</code> noch lange keinen Rückgabewert. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709868?srt=yes#m1709868 Christian Kruse https://wwwtech.de/about 2017-12-11T13:31:25Z 2017-12-11T13:31:25Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower,</p> <blockquote> <ul> <li>Ruby: <code class="language-ruby">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar <span class="token keyword">end</span></code></li> <li>Haskell: <code class="language-haskell"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>Rust: <code class="language-rust">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token punctuation">{</span> foo <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> bar <span class="token punctuation">}</span></code></li> <li>Python: <code class="language-python">x <span class="token operator">=</span> foo <span class="token keyword">if</span> condition <span class="token keyword">else</span> bar</code></li> <li>Elm: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>PureScript: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>OCaml: <code class="language-ocaml">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>F#: <code class="language-fsharp">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>…</li> </ul> </blockquote> <p>Elixir treibt es hier übrigens auf die Spitze: <code>if</code> ist hier nur ein Makro, dass zu einer Funktion umgeschrieben wird; <code>if cond do … end</code> wird im AST zu <code>if(cond, fn -> … end)</code> (vereinfacht).</p> <p>Übrigens hat @Tabellenkalk schon recht, das ist alles abgeguckt von LISP, der Mutter aller Programmiersprachen dort ist <code>if</code> ein special operator, der die Form <code>(if condition then-form [else-form])</code> hat. Der Rückgabewert ist hier der Rückgabewert der Then-Form bzw der Else-Form, je nach Ergebnis von <code>condition</code>. Gibt es keine Else-Form aber die condition gibt <code>false</code> zurück, wird <code>nil</code> zurück gegeben.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709805?srt=yes#m1709805 1unitedpower 2017-12-10T11:15:10Z 2017-12-10T11:15:10Z JavaScript Proposal: do-Expresssions <blockquote> <blockquote> <blockquote> <p>Oder gibt es sowas wie</p> <p><code>x = if(expr){}</code></p> <p>in einer Deiner Dir bekannten Programmiersprachen?</p> </blockquote> <p>Klar, das ist weit verbreitet:</p> <ul> <li>Ruby: <code class="language-ruby">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar <span class="token keyword">end</span></code></li> <li>Haskell: <code class="language-haskell"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>Rust: <code class="language-rust">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token punctuation">{</span> foo <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> bar <span class="token punctuation">}</span></code></li> <li>Python: <code class="language-python">x <span class="token operator">=</span> foo <span class="token keyword">if</span> condition <span class="token keyword">else</span> bar</code></li> <li>Elm: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>PureScript: <code class="language-elm"><span class="token hvariable">x</span> <span class="token operator">=</span> <span class="token keyword">if</span> <span class="token hvariable">condition</span> <span class="token keyword">then</span> <span class="token hvariable">foo</span> <span class="token keyword">else</span> <span class="token hvariable">bar</span></code></li> <li>OCaml: <code class="language-ocaml">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>F#: <code class="language-fsharp">x <span class="token operator">=</span> <span class="token keyword">if</span> condition <span class="token keyword">then</span> foo <span class="token keyword">else</span> bar</code></li> <li>…</li> </ul> </blockquote> <p>Was Du hier zitierst sind bedingte Zuweisungen, aber deswegen hat <code>if()</code> noch lange keinen Rückgabewert.</p> </blockquote> <p>Doch, in allen Beispielen hat <code>if</code> einen Rückgabewert, alle Beispiele zeigen echte <code>if</code>-Ausdrücke.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709808?srt=yes#m1709808 pl 2017-12-10T11:36:52Z 2017-12-10T11:51:33Z JavaScript Proposal: do-Expresssions <blockquote> <p>Doch, in allen Beispielen hat <code>if</code> einen Rückgabewert, alle Beispiele zeigen echte <code>if</code>-Ausdrücke.</p> </blockquote> <p>if <strong>vermittelt</strong> eine Wertzuweisung, so würde ich das eher formulieren. if selbst kann außer true oder false (sog. Boolsche Werte) keinen anderen Wert liefern aber if macht das implizit und jeder Versuch einer solchen direkten Zuweisung wird unweigerlich mit einem Syntaxfehler quittiert.</p> <p>Ebensowenig prüft do einen Ausdruck. Schon der Begriff do-Expression ist irreführend, weil do keinen Ausdruck prüft, sondern lediglich das letzte im Block notierte Statement liefert -- ohne es zu prüfen.</p> <p>Schönen Sonntag.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709812?srt=yes#m1709812 Matthias Apsel matthias.apsel@selfhtml.org http://brückentage.info 2017-12-10T12:10:24Z 2017-12-10T12:10:24Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower,</p> <blockquote> <p>Doch, in allen Beispielen hat <code>if</code> einen Rückgabewert, alle Beispiele zeigen echte <code>if</code>-Ausdrücke.</p> </blockquote> <p>Bedeutet also, hinterher hat das x entweder den Wert "foo" oder "bar"?</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709816?srt=yes#m1709816 1unitedpower 2017-12-10T12:29:15Z 2017-12-10T12:43:46Z JavaScript Proposal: do-Expresssions <blockquote> <blockquote> <p>Doch, in allen Beispielen hat <code>if</code> einen Rückgabewert, alle Beispiele zeigen echte <code>if</code>-Ausdrücke.</p> </blockquote> <p>if <strong>vermittelt</strong> eine Wertzuweisung, so würde ich das eher formulieren. if selbst kann außer true oder false (sog. Boolsche Werte) keinen anderen Wert liefern</p> </blockquote> <p>Das ist wieder falsch. <code>if</code>-Ausdrücke kriegen drei Argumente übergeben: einen boolschen Wert für die Bedingung, und jeweils einen Wert für den positiven und negativen Fall. Der Typ des Rückgabewerts ergibt sich dann aus dem jeweils eingetroffenen Fall. Der vollständige Typ des Ausdrucks besteht also aus vier Komponenten: drei für die Argumente und einen für den Rückgabewert. In Haskell Typdnotation sieht der Typ für <code>if</code>s zum Beispiel so aus: <code>forall t. (Bool, t, t) -> t</code>. Das heißt, für jeden beliebigen Typen <code>t</code> übergibt man dem Ausdruck zunächst einen boolschen Wert, dann zwei Werte vom Typ <code>t</code> und produziert schließlich einen Rückgabewert, der ebenfalls den Typen <code>t</code> hat.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709814?srt=yes#m1709814 pl 2017-12-10T12:25:17Z 2017-12-10T12:26:01Z JavaScript Proposal: do-Expresssions <p>Jetzt kommt man hier mittlerweile mit mindestens 8 von JS abweichenden Programmiersprachen daher, aber laufend wird mir vorgeworfen ich würde abschweifen wenn ich auf meine in Perl gemachten Erfahrungen zurückgreife. Das ist schon mehr als seltsam.</p> <blockquote> <blockquote> <p>Doch, in allen Beispielen hat <code>if</code> einen Rückgabewert, alle Beispiele zeigen echte <code>if</code>-Ausdrücke.</p> </blockquote> <p>Bedeutet also, hinterher hat das x entweder den Wert "foo" oder "bar"?</p> </blockquote> <p>Ja natürlich, aber es ist und bleibt eben ein Trugschluss, das if diese Werte zurückgibt. Genausowenig wie if 'foo' liefert gibt else 'bar' zurück. Auf diesen Gedanken würde kein Perl-Entwickler kommen.</p> <p>Schönen Sonntag.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709818?srt=yes#m1709818 1unitedpower 2017-12-10T12:35:21Z 2017-12-10T12:35:21Z JavaScript Proposal: do-Expresssions <blockquote> <p>Bedeutet also, hinterher hat das x entweder den Wert "foo" oder "bar"?</p> </blockquote> <p>Ganz genau. Das ist eigentlich nur eine schönere Syntax für den Ternären Operator. (Außer in Pyhton, die Syntax ist wirklich zum Haare raufen).</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709815?srt=yes#m1709815 Matthias Apsel matthias.apsel@selfhtml.org http://brückentage.info 2017-12-10T12:27:23Z 2017-12-10T12:27:23Z JavaScript Proposal: do-Expresssions <p>Hallo pl,</p> <blockquote> <p>Ja natürlich, aber es ist und bleibt eben ein Trugschluss, das if diese Werte zurückgibt.</p> </blockquote> <p>Wer denn dann?</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709819?srt=yes#m1709819 Tabellenkalk 2017-12-10T12:35:24Z 2017-12-10T12:35:24Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Jetzt kommt man hier mittlerweile mit mindestens 8 von JS abweichenden Programmiersprachen daher,</p> </blockquote> <p>Jemand hat <a href="https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709792#m1709792" rel="noopener noreferrer">direkt nach anderen PL</a> gefragt.</p> <blockquote> <p>Das ist schon mehr als seltsam.</p> </blockquote> <p>seltsam vorallem, dass du dich daran entweder nicht erinnerst, oder dich drüber wunderst.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709817?srt=yes#m1709817 pl 2017-12-10T12:34:43Z 2017-12-10T12:34:43Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <blockquote> <p>Ja natürlich, aber es ist und bleibt eben ein Trugschluss, das if diese Werte zurückgibt.</p> </blockquote> <p>Wer denn dann?</p> </blockquote> <p>Der Programmierer! Er ist es der für die Zuweisung sorgt indem er eine Kontrollstruktur zweckentsprechend einsetzt.</p> <p>Nicht der Schnee fegt die Straße sondern ich, wenn ich feststelle daß da zuviel davon rumliegt. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709821?srt=yes#m1709821 pl 2017-12-10T12:55:04Z 2017-12-10T12:56:02Z JavaScript Proposal: do-Expresssions <p>Sag mal, die Seite die Du hier verlinkt hast, nimmst Du das wirklich ernst was da steht!?</p> <p>Und wenn wir ohnehin schon nicht mehr bei JS sind:</p> <pre><code class="block language-perl"><span class="token variable">$x</span> <span class="token operator">=</span> <span class="token number">123</span> <span class="token keyword">if</span> <span class="token variable">$exp</span><span class="token punctuation">;</span> <span class="token comment"># poetry mode</span> <span class="token keyword">next</span> <span class="token keyword">if</span> <span class="token variable">$exp</span><span class="token punctuation">;</span> <span class="token comment"># innerhalb eines Schleifenkörpers</span> <span class="token comment"># mehrere Statements kapseln</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token keyword">do</span><span class="token punctuation">{</span> <span class="token comment"># more code</span> <span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token keyword">undef</span><span class="token punctuation">;</span> <span class="token variable">*DATA</span><span class="token punctuation">;</span> <span class="token comment"># hier liegt z.B. ein Template</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token variable">$exp</span><span class="token punctuation">;</span> <span class="token comment"># like do, wobei eval dafür sorgt, dass Exceptions aufgefangen werden</span> <span class="token keyword">print</span> <span class="token keyword">eval</span><span class="token punctuation">{</span> <span class="token comment"># jede Menge Code</span> <span class="token keyword">my</span> <span class="token variable">$buffer</span><span class="token punctuation">;</span> <span class="token comment"># Code womit buffer was kriegt</span> <span class="token comment"># Dateien lesen z.b.</span> <span class="token comment"># dabei können Exceptions fallen</span> <span class="token variable">$buffer</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator">||</span> <span class="token string">"Eine Exception trat auf, weil: $@"</span><span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$x</span> <span class="token operator">=</span> <span class="token variable">$x</span> <span class="token operator">==</span> <span class="token number">99</span> <span class="token operator">?</span> <span class="token variable">$x</span> <span class="token punctuation">:</span> <span class="token keyword">do</span><span class="token punctuation">{</span> <span class="token comment"># viele Zeilen Code</span> <span class="token string">'um diesen Wert für x zu kriegen'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> </code></pre> <p>Ansonsten habe ich hier auch an anderer Stelle einige weitere Beispiele gepostet um einen sinnvollen und zweckmäßigen Einsatz von do{}-Blöcken zu zeigen. In JS würde ich do{}-Blöcke sinngemäß genauso verwenden.</p> <p>Was die von Dir verlinkte Seite in kleinster Weise hergibt. MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709838?srt=yes#m1709838 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-10T22:28:24Z 2017-12-10T22:28:24Z JavaScript Proposal: do-Expresssions <p>@@pl</p> <blockquote> <blockquote> <blockquote> <p>Ja natürlich, aber es ist und bleibt eben ein Trugschluss, das if diese Werte zurückgibt.</p> </blockquote> <p>Wer denn dann?</p> </blockquote> <p>Der Programmierer! Er ist es der für die Zuweisung sorgt indem er eine Kontrollstruktur zweckentsprechend einsetzt.</p> </blockquote> <p>Der Programmier gibt Werte zurück? Das halte ich für auch einen Trugschluss.</p> <blockquote> <p>Nicht der Schnee fegt die Straße sondern ich, wenn ich feststelle daß da zuviel davon rumliegt.</p> </blockquote> <p><em>„Du kannst gleich damit anfangen.“</em> (<a href="https://www.youtube.com/watch?v=zj0J-Uk5Iw4#t=58s" rel="nofollow noopener noreferrer">Lou Caruthers zu Goldie Wilson, 1955</a>)</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709850?srt=yes#m1709850 Tabellenkalk 2017-12-11T09:27:56Z 2017-12-11T09:27:56Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <blockquote> <p>Der Programmierer!</p> </blockquote> <p>Der Programmier gibt Werte zurück?</p> </blockquote> <p>Wusstest du das nicht? Z.B. beim Windows-Taschenrechner ist intern die Telefonnummer vom Programmierer hinterlegt, das Programm ruft dann mithilfe von Modem und Sprachsoftware an und fragt direkt den Programmierer: "Hey, Chef, was bitte ist die Wurzel aus PI?"…</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709865?srt=yes#m1709865 pl 2017-12-11T12:26:58Z 2017-12-11T12:26:58Z JavaScript Proposal: do-Expresssions <blockquote> <p>eine syntaktisch korrekte Zeile** in Javascript ist, die auch problemlos evaluiert, oder? Magst du bei der immer noch behaupten, sie ergäbe 'wahr', also true?</p> </blockquote> <p>Es sind zwei verschiedene Dinge.</p> <ol> <li><code>x=true;</code> evaluiert zu einer wahren Aussage</li> <li><code>x=false;</code> dito</li> <li>danach ist x false.</li> </ol> <p>Das ist übrigens auch in der Shell-Programierung so, daß jede Anweisung wahr ergeben muss. Man kann auch sagen, wahr heißt syntaktisch korrekt. Und wo wir schon beim <code>do</code> sind, in Perl ist</p> <pre><code class="block language-perl"><span class="token keyword">do</span> <span class="token string">'datei'</span><span class="token punctuation">;</span> </code></pre> <p><strong>immer</strong> wahr, auch dann wenn es die datei gar nicht gibt. Wohingegen ein <code>do undef;</code> zu einem fatalen Fehler führt weil diese Anweisung niemals zu einer wahren Aussage wird.</p> <p>Ich hoffe das diese, meine Ausführungen zu einem bischen mehr Verständnis deinerseits beitragen. Auch diejenigen die mir hier noch blöder als Du gekommen sind, dürfen von mir hier weiterhin stets fachlich korrekte Anworten erwarten -- nichts Anderes!</p> <p>MfG</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709863?srt=yes#m1709863 Tabellenkalk 2017-12-11T11:40:10Z 2017-12-11T11:40:10Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Welche Erfahrungen hast Du mit do{} in LISP?</p> </blockquote> <p>ich hab mal ein <a href="https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709798#m1709798" rel="noopener noreferrer">weißes Zwergkaninchen</a> gesehen…</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709866?srt=yes#m1709866 Schnabeltier 2017-12-11T12:47:10Z 2017-12-11T12:47:10Z JavaScript Proposal: do-Expresssions <blockquote> <blockquote> <p>eine syntaktisch korrekte Zeile** in Javascript ist, die auch problemlos evaluiert, oder? Magst du bei der immer noch behaupten, sie ergäbe 'wahr', also true?</p> </blockquote> <p>Es sind zwei verschiedene Dinge.</p> <ol> <li><code>x=true;</code> evaluiert zu einer wahren Aussage</li> <li><code>x=false;</code> dito</li> <li>danach ist x false.</li> </ol> </blockquote> <p>Vielleicht meinen wir sogar beide das gleiche. Aber so, wie du es formulierst, klingt es einfach völlig falsch.</p> <p>Mein Beispiel war nicht <code>x=false</code>, sondern <code>false</code>. Ein Statement, das zugegebenermaßen wenig sinnvoll ist, aber syntaktisch korrekt, und natürlich zu false evaluiert …</p> <blockquote> <p>Das ist übrigens auch in der Shell-Programierung so, daß jede Anweisung wahr ergeben muss. Man kann auch sagen, wahr heißt syntaktisch korrekt.</p> </blockquote> <p>… weil "wahr" und "syntaktisch korrekt" eben NICHT das gleiche heißt.</p> <blockquote> <p>Ich hoffe das diese, meine Ausführungen zu einem bischen mehr Verständnis deinerseits beitragen. Auch diejenigen die mir hier noch blöder als Du gekommen sind, dürfen von mir hier weiterhin stets fachlich korrekte Anworten erwarten -- nichts Anderes!</p> </blockquote> <p> </p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709867?srt=yes#m1709867 1unitedpower 2017-12-11T13:01:24Z 2017-12-11T13:01:24Z JavaScript Proposal: do-Expresssions <blockquote> <p>Es sind zwei verschiedene Dinge.</p> <ol> <li><code>x=true;</code> evaluiert zu einer wahren Aussage</li> <li><code>x=false;</code> dito</li> </ol> </blockquote> <p>Das ist wieder nicht die Wahrheit. <code>x = false</code> evaluiert zu <code>false</code>, das ist in der EcmaScript-Spezifikation eindeutig festgelegt, ich habe die relevanten Schritte aus dem Evaluierungsalgorithmus mal für dich rausgesucht:</p> <h3><a href="https://tc39.github.io/ecma262/#sec-assignment-operators-runtime-semantics-evaluation" rel="nofollow noopener noreferrer">12.15.4 Runtime Semantics: Evaluation</a></h3><p><code>LeftHandSideExpression=AssignmentExpression</code></p> <p>3. Let <code>rref</code> be the result of evaluating AssignmentExpression.<br> 4. Let <code>rval</code> be <code>? GetValue(rref)</code>.<br> 6. Return <code>rval</code>.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709869?srt=yes#m1709869 JürgenB https://www.j-berkemeier.de 2017-12-11T13:31:26Z 2017-12-11T13:31:26Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <blockquote> <ol> <li><code>x=true;</code> evaluiert zu einer wahren Aussage</li> <li><code>x=false;</code> dito</li> </ol> </blockquote> <p>Das ist wieder nicht die Wahrheit. <code>x = false</code> evaluiert zu <code>false</code>, das ist in der EcmaScript-Spezifikation eindeutig festgelegt, ich habe die relevanten Schritte aus dem Evaluierungsalgorithmus mal für dich rausgesucht:</p> </blockquote> <p>das erkennt man auch an Zuweisungsketten:</p> <pre><code class="block language-javascript">x <span class="token operator">=</span> y <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">;</span> </code></pre> <p>setzt x und y auf 42, und</p> <pre><code class="block language-javascript">x <span class="token operator">=</span> y <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> </code></pre> <p>setzt eben beide Variablen auf false.</p> <p>Gruß<br> Jürgen</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709874?srt=yes#m1709874 JürgenB https://www.j-berkemeier.de 2017-12-11T13:47:11Z 2017-12-11T13:47:11Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Übrigens hat @Tabellenkalk schon recht, das ist alles abgeguckt von LISP, der Mutter aller Programmiersprachen dort ist <code>if</code> ein special operator, der die Form <code>(if condition then-form [else-form])</code> hat. Der Rückgabewert ist hier der Rückgabewert der Then-Form bzw der Else-Form, je nach Ergebnis von <code>condition</code>. Gibt es keine Else-Form aber die condition gibt <code>false</code> zurück, wird <code>nil</code> zurück gegeben.</p> </blockquote> <p>ich weiß jetzt nicht, was älter ist, aber mein erster Kontakt mit <code>do</code> sah so aus:</p> <pre><code class="block language-fortran"> <span class="token keyword">do</span> label var <span class="token operator">=</span> expr1<span class="token punctuation">,</span> expr2<span class="token punctuation">,</span> expr3 statements label <span class="token keyword">continue</span> </code></pre> <p><a href="https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html" rel="nofollow noopener noreferrer">https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html</a></p> <p>Gruß<br> Jürgen</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709880?srt=yes#m1709880 MudGuard http://www.andreas-waechter.de/ 2017-12-11T13:58:09Z 2017-12-11T13:58:09Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <p>Übrigens hat @Tabellenkalk schon recht, das ist alles abgeguckt von LISP, der Mutter aller Programmiersprachen </p> </blockquote> <p>Lisp ist nicht die Mutter aller Programmiersprachen, Lisp ist die Mutter aller Klammern!</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709879?srt=yes#m1709879 MudGuard http://www.andreas-waechter.de/ 2017-12-11T13:56:15Z 2017-12-11T13:57:01Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <blockquote> <blockquote> <ol> <li><code>x=true;</code> evaluiert zu einer wahren Aussage</li> <li><code>x=false;</code> dito</li> </ol> </blockquote> </blockquote> <p>das erkennt man auch an Zuweisungsketten:</p> <pre><code class="block language-javascript">x <span class="token operator">=</span> y <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">;</span> </code></pre> <p>setzt x und y auf 42, und</p> <pre><code class="block language-javascript">x <span class="token operator">=</span> y <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> </code></pre> <p>setzt eben beide Variablen auf false.</p> </blockquote> <p>oder auch an</p> <pre><code class="block language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>x <span class="token operator">=</span> <span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> </code></pre> <p>x enthält danach den Rückgabewert von getValue() und je nachdem, ob dieser zu true oder zu false evaluiert, wird der "then"-Block ausgeführt oder (soweit vorhanden) der "else"-Block.</p> <p>Aber <strong>wir</strong> können sowas ja nicht wissen, wir sind ja alle keine richtigen Programmierer …</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709871?srt=yes#m1709871 dedlfix 2017-12-11T13:41:17Z 2017-12-11T13:41:17Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <p>Rückwärtskompatibilität.</p> <p>Eine <code>do</code>-Expression kannst du einführen, ohne, dass du potentiell das halbe Internet kaputt machst. Wenn du jetzt anfängst, JS funktionaler zu machen und Kontrollstrukturen einen Wert zurück geben lässt, dann brichst du potentiell existierende Codebases.</p> </blockquote> <p>Daran habe ich auch gedacht, kann mir aber nicht vorstellen, welche syntaktisch korrekten Fälle damit kaputtgehen, wenn man eine Syntax à la <code>var foo = if ...</code> hinzufügt.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709873?srt=yes#m1709873 Christian Kruse https://wwwtech.de/about 2017-12-11T13:43:21Z 2017-12-11T13:43:21Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <blockquote> <p>Rückwärtskompatibilität.</p> <p>Eine <code>do</code>-Expression kannst du einführen, ohne, dass du potentiell das halbe Internet kaputt machst. Wenn du jetzt anfängst, JS funktionaler zu machen und Kontrollstrukturen einen Wert zurück geben lässt, dann brichst du potentiell existierende Codebases.</p> </blockquote> <p>Daran habe ich auch gedacht, kann mir aber nicht vorstellen, welche syntaktisch korrekten Fälle damit kaputtgehen, wenn man eine Syntax à la <code>var foo = if ...</code> hinzufügt.</p> </blockquote> <p>Das hast du nicht gefordert! du hast gefordert, dass <code>if</code>/<code>for</code>/etc Rückgabewerte haben. Und von da ist es nicht mehr weit, dass man versehentlich Werte zurück gibt, die man nicht zurück geben wollte.</p> <p>Wenn man sich beschränkt auf Zuweisungen, erhöht man wieder die Komplexität der Sprache um einen Sonderfall. Auch nicht wünschenswert.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709878?srt=yes#m1709878 dedlfix 2017-12-11T13:56:05Z 2017-12-11T13:56:05Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <blockquote> <blockquote> <p>Rückwärtskompatibilität.</p> <p>Eine <code>do</code>-Expression kannst du einführen, ohne, dass du potentiell das halbe Internet kaputt machst. Wenn du jetzt anfängst, JS funktionaler zu machen und Kontrollstrukturen einen Wert zurück geben lässt, dann brichst du potentiell existierende Codebases.</p> </blockquote> <p>Daran habe ich auch gedacht, kann mir aber nicht vorstellen, welche syntaktisch korrekten Fälle damit kaputtgehen, wenn man eine Syntax à la <code>var foo = if ...</code> hinzufügt.</p> </blockquote> <p>Das hast du nicht gefordert! du hast gefordert, dass <code>if</code>/<code>for</code>/etc Rückgabewerte haben. Und von da ist es nicht mehr weit, dass man versehentlich Werte zurück gibt, die man nicht zurück geben wollte.</p> </blockquote> <p>Versteh ich nicht. Wohin zurückgeben? Welche bisher korrekte Syntax könnte denn damit ungewollt Dinge bekommen.</p> <blockquote> <p>Wenn man sich beschränkt auf Zuweisungen, erhöht man wieder die Komplexität der Sprache um einen Sonderfall. Auch nicht wünschenswert.</p> </blockquote> <p>Was anderes als Zuweisen oder Parameterübergaben sollte man mit Rückgabewerten wollen? Und was anderes als Zuweisungen oder Parameterübergaben sollte denn betroffen sein, wenn es Rückgabewerte gibt?</p> <p>Und wie holt sich denn das <code>do</code> den Wert, wenn ein <code>if</code> oder das im Eingangsbeispiel gezeigte <code>switch</code> (weiterhin) nichts zurückgibt? Irgendwie muss doch diese Funktionalität auch in die bestehenden Statements eingebaut werden, oder nicht? Oder sind das dann Kopien der bisherigen Statements, die syntaktisch gleich oder zumindest ähnlich sind, aber intern anders funktionieren?</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709876?srt=yes#m1709876 Christian Kruse https://wwwtech.de/about 2017-12-11T13:50:48Z 2017-12-11T13:50:48Z JavaScript Proposal: do-Expresssions <p>Hallo JürgenB,</p> <blockquote> <p>ich weiß jetzt nicht, was älter ist, aber mein erster Kontakt mit <code>do</code> sah so aus:</p> <pre><code class="block language-fortran"> <span class="token keyword">do</span> label var <span class="token operator">=</span> expr1<span class="token punctuation">,</span> expr2<span class="token punctuation">,</span> expr3 statements label <span class="token keyword">continue</span> </code></pre> <p><a href="https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html" rel="nofollow noopener noreferrer">https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html</a></p> </blockquote> <p>Fortran ist ein Jahr älter als LISP, aber LISP hatte diese Formen-Syntax mit dem Rückgabewert früher als Fortran </p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709877?srt=yes#m1709877 Tabellenkalk 2017-12-11T13:53:27Z 2017-12-11T13:53:27Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>ich weiß jetzt nicht, was älter ist, aber mein erster Kontakt mit <code>do</code> sah so aus:</p> <p><code>Fortran</code><br> [...]<br> <a href="https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html" rel="nofollow noopener noreferrer">https://web.stanford.edu/class/me200c/tutorial_77/09_loops.html</a></p> </blockquote> <p>Und deshalb ist die Benennung auch unglücklich. Ich seh' schon die vielen Newbie-Fragen in den JS-Foren: Warum wird meine Do-Schleife nur einmal durchlaufen?</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709890?srt=yes#m1709890 JürgenB https://www.j-berkemeier.de 2017-12-11T14:21:44Z 2017-12-11T14:21:44Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>… Ich seh' schon die vielen Newbie-Fragen in den JS-Foren: Warum wird meine Do-Schleife nur einmal durchlaufen?</p> </blockquote> <p>immer noch besser als if-Schleife </p> <p>Gruß<br> Jürgen</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709892?srt=yes#m1709892 dedlfix 2017-12-11T14:33:38Z 2017-12-11T14:33:38Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <p>Ich seh' schon die vielen Newbie-Fragen in den JS-Foren: Warum wird meine Do-Schleife nur einmal durchlaufen?</p> </blockquote> <p>Die wird natürlich solange durchlaufen, bis eine wahre Aussage entsteht - die natürlich auch false sein kann.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709888?srt=yes#m1709888 Christian Kruse https://wwwtech.de/about 2017-12-11T14:15:12Z 2017-12-11T14:15:12Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <p>Versteh ich nicht. Wohin zurückgeben? Welche bisher korrekte Syntax könnte denn damit ungewollt Dinge bekommen.</p> </blockquote> <p>Keine Ahnung. Ich bin nicht Teil des Standard-Komitees und habe mir darüber kaum Gedanken gemacht. Ich habe nur geschrieben, was mir als möglicher Grund in den Sinn kam, und ich halte das Szenario nachwievor nicht für unwahrscheinlich. Dass mir kein Fall einfällt heisst ja nicht, dass keiner existiert: Software-Entwickler sind erstaunlich kreativ, wenn es um edge cases geht.</p> <blockquote> <blockquote> <p>Wenn man sich beschränkt auf Zuweisungen, erhöht man wieder die Komplexität der Sprache um einen Sonderfall. Auch nicht wünschenswert.</p> </blockquote> <p>Was anderes als Zuweisen oder Parameterübergaben sollte man mit Rückgabewerten wollen?</p> </blockquote> <p>Auswerten. Z.B. für bedingte Verzweigungen.</p> <blockquote> <p>Und wie holt sich denn das <code>do</code> den Wert, wenn ein <code>if</code> oder das im Eingangsbeispiel gezeigte <code>switch</code> (weiterhin) nichts zurückgibt? Irgendwie muss doch diese Funktionalität auch in die bestehenden Statements eingebaut werden, oder nicht? Oder sind das dann Kopien der bisherigen Statements, die syntaktisch gleich oder zumindest ähnlich sind, aber intern anders funktionieren?</p> </blockquote> <p>Kann ich dir nicht sagen. Da musst du dich schon selber mit der Thematik beschäftigen.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709896?srt=yes#m1709896 1unitedpower 2017-12-11T15:02:02Z 2017-12-11T15:02:02Z JavaScript Proposal: do-Expresssions <blockquote> <p>Und wie holt sich denn das <code>do</code> den Wert, wenn ein <code>if</code> oder das im Eingangsbeispiel gezeigte <code>switch</code> (weiterhin) nichts zurückgibt? Irgendwie muss doch diese Funktionalität auch in die bestehenden Statements eingebaut werden, oder nicht?</p> </blockquote> <p>Statements haben in JavaScript schon heute Rückgabewerte, allein die Syntax-Regeln halten uns davon ab mit diesen Rückgabenwerten weiterzurechnen: Man kann den Rückgabewert nicht in Variablen speichern, weil auf der rechten Seite von Zuweisungen unmal keine Statements erlaubt sind. Mit <code>eval</code> kann man das allerdings simulieren:</p> <pre><code class="block language-js">x <span class="token operator">=</span> <span class="token function">eval</span><span class="token punctuation">(</span><span class="token string">'if (true) 1; else 0;'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">assert</span><span class="token punctuation">(</span>x <span class="token operator">===</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das Proposal zu do-Expression stützt sich auch auf diese Semantik.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709882?srt=yes#m1709882 Christian Kruse https://wwwtech.de/about 2017-12-11T14:05:53Z 2017-12-11T14:05:53Z JavaScript Proposal: do-Expresssions <p>Hallo MudGuard,</p> <blockquote> <blockquote> <p>Übrigens hat @Tabellenkalk schon recht, das ist alles abgeguckt von LISP, der Mutter aller Programmiersprachen </p> </blockquote> <p>Lisp ist nicht die Mutter aller Programmiersprachen, Lisp ist die Mutter aller Klammern!</p> </blockquote> <p>Die Klammern haben mich auch lange Zeit gestört. Aber irgendwann hat es klick gemacht und es ist mir wie Schuppen aus den Haaren gefallen: die Klammern machen Sinn! </p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709884?srt=yes#m1709884 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2017-12-11T14:08:14Z 2017-12-11T14:08:14Z JavaScript Proposal: do-Expresssions <p>@@Christian Kruse</p> <blockquote> <p>Die Klammern haben mich auch lange Zeit gestört. Aber irgendwann hat es klick gemacht und es ist mir wie Schuppen aus den Haaren gefallen: die Klammern machen Sinn! </p> </blockquote> <p>Und weil sie das klammerheimlich tun, ist dir der Sinn zuerst verborgen geblieben‽</p> <p>LLAP </p> <div class="signature">-- <br> “When UX doesn’t consider <em>all</em> users, shouldn’t it be known as ‘<em>Some</em> User Experience’ or... SUX? #a11y” —<a href="https://twitter.com/thebillygregory/status/552466012713783297" rel="nofollow noopener noreferrer">Billy Gregory</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709886?srt=yes#m1709886 Christian Kruse https://wwwtech.de/about 2017-12-11T14:11:18Z 2017-12-11T14:11:18Z JavaScript Proposal: do-Expresssions <p>Hallo Gunnar,</p> <blockquote> <blockquote> <p>Die Klammern haben mich auch lange Zeit gestört. Aber irgendwann hat es klick gemacht und es ist mir wie Schuppen aus den Haaren gefallen: die Klammern machen Sinn! </p> </blockquote> <p>Und weil sie das klammerheimlich tun, ist dir der Sinn zuerst verborgen geblieben‽</p> </blockquote> <p>Hehe.</p> <p>Naja, ich habe auf intellektueller Ebene schon verstanden, warum LISP auf die Klammern setzt. Ich habe es nur nicht für sinnvoll gehalten. Das hat sich erst geändert, nachdem ich ein paar tausend Zeilen LISP gelesen und geschrieben hatte. Denn wenn man sich ein wenig eingelesen hat in LISP, dann merkt man, dass die Klammern den Code nicht schwerer, sondern einfacher lesbar machen.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709889?srt=yes#m1709889 dedlfix 2017-12-11T14:20:05Z 2017-12-11T14:20:05Z JavaScript Proposal: do-Expresssions <p>Tach!</p> <blockquote> <blockquote> <p>Was anderes als Zuweisen oder Parameterübergaben sollte man mit Rückgabewerten wollen?</p> </blockquote> <p>Auswerten. Z.B. für bedingte Verzweigungen.</p> </blockquote> <p>Ja, aber auch das ist kein bisher syntaktisch gültiger Platz für ein <code>if</code> etc. gewesen.</p> <p>Anders gefragt, kann man denn ausschließen, dass das neue <code>do</code> keine rückwärtigen Probleme bereitet?</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709894?srt=yes#m1709894 Christian Kruse https://wwwtech.de/about 2017-12-11T14:55:07Z 2017-12-11T14:55:07Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <p>Anders gefragt, kann man denn ausschließen, dass das neue <code>do</code> keine rückwärtigen Probleme bereitet?</p> </blockquote> <p>Ja. Es gibt bisher kein <code>do</code>-Statement (nur eine <code>do ... while</code>-Schleife, was aber ein anderes Konstrukt ist). Der neue Code ist also zwangsläufig nicht rückwärtskompatibel, und damit kann nichts durch eine Veränderung der VM brechen: <code>do</code>-Statements können nur in neuem Code auftreten. Das Testen von neuem Code obliegt der Verantwortung des Entwicklers.</p> <p>Bei der Veränderung der Semantik von bestehenden Syntax-Konstrukten verändert sich halt die Semantik bestehenden Codes. Das gilt es im Sinne der Rückwärtskompatibilität unbedingt zu vermeiden.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709891?srt=yes#m1709891 Tabellenkalk 2017-12-11T14:29:51Z 2017-12-11T14:29:51Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>immer noch besser als if-Schleife </p> </blockquote> <p>man könnte den Betreiber von <a href="http://www.if-schleife.de" rel="nofollow noopener noreferrer">if-schleife.de</a> bitten, ein Äquivalent für die Do-Schleife einzurichten :)</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709893?srt=yes#m1709893 Tabellenkalk 2017-12-11T14:39:47Z 2017-12-11T14:40:16Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Die wird natürlich solange durchlaufen, bis eine wahre Aussage entsteht - die natürlich auch false sein kann.</p> </blockquote> <p>Kunde im Blumenladen: Ist diese Blume künstlich?<br> Florist: Natürlich!</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709895?srt=yes#m1709895 Christian Kruse https://wwwtech.de/about 2017-12-11T14:55:42Z 2017-12-11T14:55:42Z JavaScript Proposal: do-Expresssions <p>Hallo dedlfix,</p> <blockquote> <blockquote> <p>Ich seh' schon die vielen Newbie-Fragen in den JS-Foren: Warum wird meine Do-Schleife nur einmal durchlaufen?</p> </blockquote> <p>Die wird natürlich solange durchlaufen, bis eine wahre Aussage entsteht - die natürlich auch false sein kann.</p> </blockquote> <p><em>rotfl</em> - made my day</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709899?srt=yes#m1709899 JürgenB https://www.j-berkemeier.de 2017-12-11T15:33:38Z 2017-12-11T15:33:38Z JavaScript Proposal: do-Expresssions <p>Hallo,</p> <blockquote> <p>Ja. Es gibt bisher kein <code>do</code>-Statement (nur eine <code>do ... while</code>-Schleife, …</p> </blockquote> <p>und wegen dieser Schleife konnte man seine Variablen (etc.) nicht <code>do</code> nennen.</p> <p>Gruß<br> Jürgen</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709901?srt=yes#m1709901 MudGuard http://www.andreas-waechter.de/ 2017-12-11T16:12:50Z 2017-12-11T16:12:50Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <p>Ja. Es gibt bisher kein <code>do</code>-Statement (nur eine <code>do ... while</code>-Schleife, was aber ein anderes Konstrukt ist).</p> </blockquote> <pre><code class="block language-javascript"><span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>condition1<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//something</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token comment">//something else</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">while</span> <span class="token punctuation">(</span>condition2<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> foo <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">;</span> <span class="token comment">//another thing</span> <span class="token punctuation">}</span> </code></pre> <p>Bisher ist ganz klar, daß die Schleife eine do-while-Schleife ist.</p> <p>Die Klammern zur Blockbildung um //another thing sind dazu da, um foo im Scope zu begrenzen.</p> <p>Mit dem neuen do-Konstrukt könnte aber auch das do mit dem } enden, das while läutet dann eine neue Schleife ein.</p> <p>; am Zeilenende nach dem while ist zwar nett, aber m.W. bisher nicht erforderlich.</p> <p>Und daß das do nicht einer Variable zugewiesen wird, ist ja nicht schlimm. Ein nichtgefangener Rückgabewert ist nix ungewöhnliches.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709897?srt=yes#m1709897 Christian Kruse https://wwwtech.de/about 2017-12-11T15:05:12Z 2017-12-11T15:05:12Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower,</p> <blockquote> <p>Statements haben in JavaScript schon heute Rückgabewerte, allein die Syntax-Regeln halten uns davon ab mit diesen Rückgabenwerten weiterzurechnen: Man kann den Rückgabewert nicht in Variablen speichern, weil auf der rechten Seite von Zuweisungen unmal keine Statements erlaubt sind. Mit <code>eval</code> kann man das allerdings simulieren:</p> <pre><code class="block language-js">x <span class="token operator">=</span> <span class="token function">eval</span><span class="token punctuation">(</span><span class="token string">'if (true) 1; else 0;'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> console<span class="token punctuation">.</span><span class="token function">assert</span><span class="token punctuation">(</span>x <span class="token operator">===</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das Proposal zu do-Expression stützt sich auch auf diese Semantik.</p> </blockquote> <p>Dann muss ich Dedlfix zustimmen: das Proposal geht nicht weit genug bzw wählt den falschen Ansatz. Das Erlauben einer Zuweisung wäre hier konsequenter und IMHO auch sinnvoller.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1710073?srt=yes#m1710073 1unitedpower 2017-12-13T13:37:36Z 2017-12-13T13:37:36Z JavaScript Proposal: do-Expresssions <blockquote> <p>Dann muss ich Dedlfix zustimmen: das Proposal geht nicht weit genug bzw wählt den falschen Ansatz. Das Erlauben einer Zuweisung wäre hier konsequenter und IMHO auch sinnvoller.</p> </blockquote> <p>Fände ich auch, aber das wäre wohl nicht abwärtskompatibel. Ein Problem scheint zu sein, dass die automatische Erzeugung von Semikolons dafür sorgt, dass so eine Syntax wie dedlfix sie vorschlägt nicht eindeutig wäre. Wenn ich die Diskussion auf GitHub bisher richtig verstehe, braucht man das <code>do</code> nur als Krücke für den Parser. Im abstrakten Syntaxbaum wird das <code>do</code> schließlich eliminiert und man erhält ein Programm, das mehr oder weniger automatisch die richtige Semantik trägt. Aus Implementierungssicht muss man also nur den Parser anfassen.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709930?srt=yes#m1709930 Rolf B 2017-12-12T09:28:10Z 2017-12-12T09:28:10Z JavaScript Proposal: do-Expresssions <p>Hallo MudGuard,</p> <p>bösartig du bist </p> <p>Guck mal hier: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.1" rel="nofollow noopener noreferrer">http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.1</a></p> <p>Nach do while() ist das Semikolon syntaktisch erforderlich. Allerdings kommen hier die bad parts von JavaScript ins Spiel, die sich ein Semikolon dazudenken, wo sie eins für nötig halten, wie zum Beispiel hier zwischen return und 17+4...</p> <pre><code class="block language-js"> <span class="token keyword">return</span> <span class="token number">17</span><span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">;</span> </code></pre> <p>Das von Dir gezeigte Konstrukt wäre damit eindeutig: eine do-Expression, gefolgt von einer while-Schleife. Ich möchte aber nicht den Parser dafür programmieren müssen </p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709934?srt=yes#m1709934 MudGuard http://www.andreas-waechter.de/ 2017-12-12T10:04:45Z 2017-12-12T10:04:45Z JavaScript Proposal: do-Expresssions <p>Hi,</p> <blockquote> <p>bösartig du bist </p> </blockquote> <p>Ich? Ich weiß gar nicht, wie bösartig sein geht. </p> <blockquote> <p>Das von Dir gezeigte Konstrukt wäre damit eindeutig: eine do-Expression, gefolgt von einer while-Schleife. Ich möchte aber nicht den Parser dafür programmieren müssen </p> </blockquote> <p>Ich wenn da was zu sagen hätte, würde - auch wenn es keine uneindeutigen Sachen erzeugt, für so ein neues Konstrukt dann doch eher zu einem jungfräulichen keyword<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> wie "valueof" tendieren. Das ergäbe kein derartiges Problem.</p> <p>Und ich finde, daß das "do" auch nicht wirklich offensichtlich sagt, was da passiert. Und bei Kenntnis der do-while-Schleife auch noch verwirrend ist, weil dasselbe keyword unterschiedliche Bedeutungen hat.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>ok, dann würden halt alle Variablen, die so heißen wie die Jungfrau, ungültig werden. Also auch nicht problemlos <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> </ol> </section> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1709964?srt=yes#m1709964 Rolf B 2017-12-12T15:12:45Z 2017-12-12T15:12:45Z JavaScript Proposal: do-Expresssions <p>Hallo MudGuard,</p> <p>was passiert eigentlich hier?</p> <pre><code class="block language-js"><span class="token keyword">let</span> q <span class="token operator">=</span> <span class="token number">17</span><span class="token punctuation">;</span> <span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">test</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token literal-property property">pest</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">let</span> z <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">test</span><span class="token operator">:</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token literal-property property">pest</span><span class="token operator">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>q <span class="token operator">==</span> <span class="token number">17</span><span class="token punctuation">)</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> z<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> y<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token function">x</span><span class="token punctuation">(</span><span class="token string">'test'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Hab ich da jetzt eine Closure geschnürt?</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1710068?srt=yes#m1710068 1unitedpower 2017-12-13T12:52:48Z 2017-12-13T12:52:48Z JavaScript Proposal: do-Expresssions <blockquote> <pre><code class="block language-js"><span class="token keyword">let</span> q <span class="token operator">=</span> <span class="token number">17</span><span class="token punctuation">;</span> <span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token keyword">do</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">test</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token literal-property property">pest</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">let</span> z <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">test</span><span class="token operator">:</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token literal-property property">pest</span><span class="token operator">:</span> <span class="token number">8</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>q <span class="token operator">==</span> <span class="token number">17</span><span class="token punctuation">)</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> z<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> y<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token function">x</span><span class="token punctuation">(</span><span class="token string">'test'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Hab ich da jetzt eine Closure geschnürt?</p> </blockquote> <p>Zwei Closures sogar. Denn beide Funktionen binden Variablen aus dem umgebenden Geltungsbereich, das macht einen Closure auch schon aus. Das kennt man aus dem Matherunterricht vielleicht noch als Funktionsschar $$f_a(x) = ax$$. Hier ist das $$a$$ eine "Umgebungsvariable". In deinem Beispiel spielen <code>z</code> und <code>y</code> diese Rollen.</p> https://forum.selfhtml.org/self/2017/dec/8/javascript-proposal-do-expresssions/1710076?srt=yes#m1710076 Christian Kruse https://wwwtech.de/about 2017-12-13T14:19:54Z 2017-12-13T14:19:54Z JavaScript Proposal: do-Expresssions <p>Hallo 1unitedpower,</p> <blockquote> <p>Wenn ich die Diskussion auf GitHub bisher richtig verstehe, braucht man das <code>do</code> nur als Krücke für den Parser. Im abstrakten Syntaxbaum wird das <code>do</code> schließlich eliminiert und man erhält ein Programm, das mehr oder weniger automatisch die richtige Semantik trägt. Aus Implementierungssicht muss man also nur den Parser anfassen.</p> </blockquote> <p>Hm, ja, verstehe. Macht Sinn. Danke für die Erläuterungen.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a> </div>