{"id":294,"date":"2012-04-01T21:51:18","date_gmt":"2012-04-01T20:51:18","guid":{"rendered":"http:\/\/www.epischel.de\/wordpress\/?p=294"},"modified":"2018-06-28T21:38:57","modified_gmt":"2018-06-28T19:38:57","slug":"coffeescript-vortrag","status":"publish","type":"post","link":"https:\/\/www.epischel.de\/wordpress\/2012\/04\/coffeescript-vortrag\/","title":{"rendered":"BED-Con: CoffeeScript-Vortrag"},"content":{"rendered":"<p>Unter dem Titel &#8222;Why Coffee is good for Developers&#8220; hielt <a href=\"http:\/\/blog.notadomain.com\/about\">Moritz Grauel<\/a> einen Talk \u00fcber <a href=\"http:\/\/coffeescript.org\">CoffeeScript<\/a>. Er brachte den <a href=\"http:\/\/bed-con.org\/talks\/why-coffee-is-good-for-developers\/\">Vortrag<\/a> locker bis lustig r\u00fcber und scheint beispielsweise ein Fan von <a href=\"http:\/\/www.oatmeal.com\">oatmeal.com<\/a> zu sein.<\/p>\n<p>CoffeeScript\u00a0will &#8222;Javascript minus (einigen) WTFs&#8220; sein, von denen Moritz einige pr\u00e4sentierte (via <a href=\"https:\/\/web.archive.org\/web\/20180409183522\/https:\/\/wtfjs.com\/\">wtfjs.com<\/a>). Genannt wurde z.B.<\/p>\n<ul>\n<li>Operator &#8222;==&#8220; mit type coercion, &#8222;===&#8220; ohne (anscheinend haben sich bei der EcmaStandardisierung\u00a0die Microsoft Jungs (und M\u00e4dels) gegen die Netscape Jungs (und M\u00e4dels) <a href=\"http:\/\/c2.com\/cgi\/wiki?JavaScriptRocks\">durchgesetzt<\/a>)<\/li>\n<li>Zahlen sind generell floats (einfache Genauigkeit)<\/li>\n<li>automatische Typkonvertierung insbesondere Strings und Zahlen sind nicht immer Sinnvoll<\/li>\n<li>der inkonsequente Array-Konstruktor (new Array(5) erstellt ein 5-elementiges Array, new Array(4,5) erstellt ein Array [4,5]), ich w\u00fcrde f\u00fcr gleichzeitige Deklaration<\/li>\n<\/ul>\n<p>Als Metapher sehr sch\u00f6n ein <a href=\"https:\/\/web.archive.org\/web\/20120302051416\/http:\/\/img.anongallery.org\/img\/2\/0\/javascript-the-good-parts-the-definitive-guide.jpg\">Foto<\/a> mit den B\u00fcchern &#8222;Javascript Definitive Guide&#8220; und &#8222;Javascript the good parts&#8220; nebeneinander &#8211; ersteres 5x so dick wie zweiteres.<\/p>\n<p>Allerdings w\u00fcrde ich sagen, was auf der Folie for &#8222;Javascript sucks&#8220; stand: learn your tools. Nur weil Javascript im Namen &#8222;java&#8220; hat und die Syntax wie Java\/C\/C# you-name-it aussieht, ist sie doch vom Konzept her um einiges entfernt. Siehe auch\u00a0<a href=\"http:\/\/c2.com\/cgi\/wiki?JavaScriptRocks\">JavaScriptRocks<\/a> . Bei dieser Gelegenheit kann ich auch die Hintergrundartikel zum Thema &#8222;Closures in Javascript&#8220; empfehlen, weil er auf das Innenleben von JS eingeht.<\/p>\n<p>Wie auch immer, Moritz k\u00fcndigt Coffeescript als &#8222;Javascript without the fail&#8220; an. Coffeescript kompiliert zu lesbarem Javascript (es gibt also eine einfache Exit-Strategie, falls man Coffeescript wieder loswerden will: einfach javascript generieren und damit weiterarbeiten). Der Nachteil ist dabei, dass Debuging etc. nur anhand des generierten JS Codes geht.<\/p>\n<p>Die CS Syntax hat significant whitespace, d.h. geschweifte Klammern und Semikolons fallen weg, runde Klammern bei Funktionsaufrufen sind optional, das function keyword wird durch &#8222;-&gt;&#8220; ersetzt. Ein sch\u00f6ner Vergleich einer jquery-Konstruktes in <a href=\"http:\/\/blog.notadomain.com\/wcig4d\/#\/step-79\">JS<\/a> und in <a href=\"http:\/\/blog.notadomain.com\/wcig4d\/#\/step-84\">CoffeeScript<\/a>. Ich finde es zumindest gew\u00f6hnungsbed\u00fcrftig, insbesondere wenn die runden Klammern bei Funktionsaufruf wegfallen, dann aber die Argumente der anonymen Funktion in Klammern stehen.<\/p>\n<p>F\u00fcr weitere Features siehe Vortrag. Bei meiner Recherche ist mir aufgefallen, dass es seit Javascript 1.7 auch list comprehension f\u00fcr Arrays gibt, lt. <a href=\"http:\/\/en.wikipedia.org\/wiki\/Comparison_of_programming_languages_%28list_comprehension%29#JavaScript\">Wikipedia<\/a> dies aber nur durch Mozilla unterst\u00fctzt wird.<\/p>\n<p>Insgesamt schreibe ich wahrscheinlich (noch) nicht genug JS, um von CS zu profitieren.<\/p>\n<p>Interessant fand ich, dass Moritz weder PPT noch Keynote sondern ein HTML\/CSS\/JS basiertes Pr\u00e4sentationsprogramm namens <a href=\"http:\/\/bartaz.github.com\/impress.js\/\">impress.js<\/a> benutzt, bzw. seines eigenen CS port. Er hat dazu <a href=\"https:\/\/web.archive.org\/web\/20160809061832\/http:\/\/blog.notadomain.com\/blog\/2012\/03\/31\/berlin-expert-days\/\">ein paar Anmerkungen<\/a> gemacht. Die Animationen fand ich beeindruckend. In der Pr\u00e4sentation sah das fl\u00fcssig aus. Auf meinem Rechner ruckelt es allerdings. Er gab gleich den Hinweis, dass die Pr\u00e4sentation vollst\u00e4ndig nur mit einem aktuellen Webkit-Browser funktioniert, aber auch mit anderen Browser anzusehen sei. Bei Chrome 17 meinte die Pr\u00e4si, dass nicht alle Funktionen unterst\u00fctzt werden, nach Upgrade auf Chrome 18 kam die Meldung nicht.<\/p>\n<p>Alles in allem ein interessanter Vortrag.<\/p>\n<p><strong>Update<\/strong>: Moritz verweist auf\/empfiehlt einen Google Tech Talk <a href=\"http:\/\/www.youtube.com\/watch?v=hQVTIJBZook\">Javascript: The Good Parts<\/a> von <a href=\"http:\/\/www.crockford.com\/\">Douglas Crockford<\/a>.<\/p>\n<div class=\"syndication-links\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Unter dem Titel &#8222;Why Coffee is good for Developers&#8220; hielt Moritz Grauel einen Talk \u00fcber CoffeeScript. Er brachte den Vortrag locker bis lustig r\u00fcber und scheint beispielsweise ein Fan von oatmeal.com zu sein. CoffeeScript\u00a0will &#8222;Javascript minus (einigen) WTFs&#8220; sein, von denen Moritz einige pr\u00e4sentierte (via wtfjs.com). Genannt wurde z.B. Operator &#8222;==&#8220; mit type coercion, &#8222;===&#8220;&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"mf2_syndication":[],"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[30,31,119],"series":[],"class_list":["post-294","post","type-post","status-publish","format-standard","hentry","category-entwicklung","tag-bed","tag-javascript","tag-entwicklung","kind-article"],"kind":false,"_links":{"self":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/comments?post=294"}],"version-history":[{"count":14,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/294\/revisions"}],"predecessor-version":[{"id":1343,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/294\/revisions\/1343"}],"wp:attachment":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/media?parent=294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/categories?post=294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/tags?post=294"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/series?post=294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}