{"id":1407,"date":"2011-07-25T11:57:55","date_gmt":"2011-07-25T18:57:55","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/?p=1407"},"modified":"2011-07-25T12:58:04","modified_gmt":"2011-07-25T19:58:04","slug":"coffeescript","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2011\/07\/25\/coffeescript\/","title":{"rendered":"CoffeeScript"},"content":{"rendered":"<p><script type=\"text\/javascript\"> function get_style1407 () { return \"none\"; } function end1407_ () { document.getElementById('wqd1407').style.display = get_style1407(); } <\/script>Resolvi falar sobre <a href=\"http:\/\/jashkenas.github.com\/coffee-script\/\">CoffeeScript<\/a> porque algumas pessoas com poder de influ\u00eancia em diversas comunidades est\u00e3o evangelizando essa aberra\u00e7\u00e3o.<\/p>\n<h2>Hist\u00f3ria<\/h2>\n<p>Vou come\u00e7ar pelo come\u00e7o, aproximadamente entre os anos de 99 e 2009 a comunidade Javascript passou se degladiando sobre o futuro da linguagem, uma parte defendia algo pr\u00f3ximo ao ActionScript [exemplo f\u00e1cil s\u00f3 para um termo de compara\u00e7\u00e3o], com classes e outras caracter\u00edsticas que n\u00e3o existem na linguagem que \u00e9 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Prototype-based_programming\">prototype-based<\/a>. Venceu a turma conservadora, que defendia js se manter como estava.<\/p>\n<p>Para terem uma id\u00e9ia da confus\u00e3o, hoje existe a especifica\u00e7\u00e3o <a href=\"http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-262.htm\">ECMA 262<\/a> vers\u00e3o 3 e vers\u00e3o 5, justamente porque a 4 ficou no meio dessa briga e <a href=\"http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-262-arch.htm\">nunca chegou a existir<\/a>.<\/p>\n<h2>Desculpas<\/h2>\n<p>De 2006 pra c\u00e1 algumas linguagens antigas como ruby e python influenciaram todas as comunidades de desenvolvedores com argumentos &#8211; dos quais concordo em parte &#8211; como expressividade, facilidade na leitura por humanos com menos ru\u00eddo sint\u00e1tico em vez de apenas performance ou outra caracter\u00edstica t\u00e9cnica que poderia muito bem ser trabalhada em um n\u00edvel inferior (Como por exemplo, para cada linha que voce evita de escrever em Python, existem centenas em C que fazem o trabalho).<\/p>\n<p>Primeiro argumento do uso de Coffeescript \u00e9 justamente sobre ru\u00eddo sint\u00e1tico do Javascript, mas inventaram uma SINTAXE NOVA que n\u00e3o \u00e9 igual a Ruby e nem Python, mas h\u00e1 m\u00e9todos e caracter\u00edsticas de ambas para justificar seu uso. Ora bolas, porque n\u00e3o terem implementado um subset direto do Ruby?<\/p>\n<p>Inclu\u00edram o <a href=\"http:\/\/my.safaribooksonline.com\/book\/programming\/javascript\/9781449399115\/code-reuse-patterns\/klass\">Pattern Klass<\/a> como funcionalidade dessa linguagem sendo que Frameworks antigos como <a href=\"http:\/\/www.prototypejs.org\/\">Prototype<\/a> j\u00e1 implementavam isso.<\/p>\n<p>Em Javascript voc\u00ea consegue\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/Closure_(computer_science)\">Closure<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Currying\">Currying<\/a> e outras constru\u00e7\u00f5es funcionais porque function \u00e9 um cidad\u00e3o de primeira classe na linguagem, consegue ter\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/Mixin\">Mixin<\/a> at\u00e9 mais f\u00e1cil do que em Ruby porque al\u00e9m de din\u00e2mico \u00e9 de tipos fracos.<\/p>\n<p>A justificativa de se usar Coffeescript por causa de sintaxe \u00e9 a mesma de muitos que usam Groovy porque a &#8220;curva&#8221; de Java seria menor. Fal\u00e1cia grave. O problema de um desenvolvedor n\u00e3o aprender uma sintaxe porque \u00e9 assim ou assado j\u00e1 demonstra em muito que ele n\u00e3o quer aprender as caracter\u00edsticas da linguagem e vai continuar &#8220;programando em Java&#8221; usando Groovy.<\/p>\n<p>Isso \u00e9 muito comum, j\u00e1 passei por muito programador PHP programando em Ruby como PHP ou programador Java programando em javascript como Java.<\/p>\n<p>Alguns entusiastas de Ruby defendem o uso porque lembraria a sintaxe que se sentem familiar e por ironia citam List Comprehensions, funcionalidade que existe no Python e n\u00e3o no Ruby. Como voce contorna isso no Ruby? Vamos parar com a covardia e sair da zona de conforto?<\/p>\n<h2>Problemas<\/h2>\n<p>Eu tenho um problema com linguagens intermedi\u00e1rias com Enhanced, mas v\u00e1 l\u00e1, podemos viver com isso.<\/p>\n<p>javascript tem muitos problemas, mas n\u00e3o \u00e9 apenas sintaxe, precisamos normalizar todas as vers\u00f5es e especifica\u00e7\u00f5es e atacar as fraquezas conhecidas, n\u00e3o sair criando pseudo-linguagem.<\/p>\n<p><a href=\"http:\/\/en.wikipedia.org\/wiki\/List_comprehension\">List Comprehensions<\/a> que j\u00e1 citamos, <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/New_in_JavaScript\/1.7#Array_comprehensions\">tem na vers\u00e3o 1.7<\/a> que o SpiderMonkey implementa (usado pelo Firefox) , mas o V8 (usado no Chrome, Safari e no node.js) n\u00e3o implementa, Rhino implementa e assim vai, uma confus\u00e3o s\u00f3. Os navegadores basicamente implementam a vers\u00e3o 1.5 que \u00e9 equivalente a ECMA 262 &#8211; vers\u00e3o 3 que chamamos de ES3 (ECMA Standard 3), o V8 implementa a ES5 e mant\u00e9m compatibilidade com 1.5. SpiderMonkey implementa a 1.5, mas n\u00e3o tem compatibilidade entre ES5 e 1.5, se quiser usar funcionalidades definidas na ES5 tem que usar vers\u00e3o 1.8. Confuso? \u00c9 assim mesmo.<\/p>\n<p>Se Javascript n\u00e3o se encaixa no seu projeto, n\u00e3o a use, \u00e9 porque n\u00e3o serve mesmo, agora tentar mudar as caracter\u00edsticas (como assincronismo, s\u00f3 para aproveitar o momento e bater em ferramentas como <a href=\"https:\/\/github.com\/creationix\/step\">Step<\/a>) para se encaixar \u00e9 querer usar a furadeira para pregar um prego.<\/p>\n<p>Se voc\u00ea \u00e9 obrigado, j\u00e1 que n\u00e3o existe outra alternativa na camada de apresenta\u00e7\u00e3o em Webapps (RIP ActionScript \ud83d\ude41 ), use os frameworks modernos que j\u00e1 implementam o Crossbrowser aceit\u00e1vel (nunca vai ser decente) e se beneficiam de sua idiossincrasia.\u00a0Coffeescript s\u00f3 est\u00e1 em evid\u00eancia por causa do node.js, j\u00e1 que h\u00e1 v\u00e1rias bibliotecas e at\u00e9 Frameworks implementados com isso, se a discuss\u00e3o aqui for navegador, nem invente.<\/p>\n<p>Eu por exemplo sinto mais falta de inclu\u00edrem o &#8220;<a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\/Object\/noSuchMethod\">method_missing<\/a>&#8221; na especifica\u00e7\u00e3o do que interpola\u00e7\u00e3o de strings.<\/p>\n<p>Ainda pra completar h\u00e1 uma rivalidade entre os defensores de Frameworks como entre o jQuery e Mootools que n\u00e3o sei de onde surgiu, mas n\u00f3s humanos somos assim mesmo, brigamos por religi\u00e3o e por Framework.<\/p>\n<p>Javascript \u00e9 de tipos fracos, din\u00e2micos, sem classes, orientada a prot\u00f3tipos e ass\u00edncrono&#8230; aprenda a linguagem. J\u00e1 basta de uma linguagem a mais para cada chilique de desenvolvedor por causa de um &#8220;{&#8221; ou &#8220;;&#8221;. Como algu\u00e9m, que n\u00e3o lembro quem foi, escreveu no twitter dias desses: &#8220;Antigamente todo mundo queria seu pr\u00f3prio Framework, hoje todo mundo quer sua pr\u00f3pria linguagem&#8221;.<\/p>\n<p>Aproveite e v\u00e1 me assistir no <a href=\"http:\/\/qconsp.com\/palestra\/christiano-milfont\/combinando-programacao-funcional-e-o-o-em-javascript-de-forma-pratica\">QCONSP 2011<\/a> que vou demonstrar algumas coisas bacanas de se fazer com Javascript e como a sintaxe n\u00e3o atrapalha \ud83d\ude42<\/p>\n<p id=\"wqd1407\">Typically chemist&#8217;s shop can sale to you with discreet treatments for various heartiness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra manufacturer coupon<\/a>&#8220;. Maybe &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra discount coupons<\/a>&#8221; is a so complicated matter. Matters, like &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">coupons for viagra<\/a>&#8220;, are coupled numerous types of health problems. If you need to take recipe medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may switch on erectile dysfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile disfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies. <\/p>\n<p><script type=\"text\/javascript\"> end1407_(); <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Resolvi falar sobre CoffeeScript porque algumas pessoas com poder de influ\u00eancia em diversas comunidades est\u00e3o evangelizando essa aberra\u00e7\u00e3o. Hist\u00f3ria Vou come\u00e7ar pelo come\u00e7o, aproximadamente entre os anos de 99 e 2009 a comunidade Javascript passou se degladiando sobre o futuro da linguagem, uma parte defendia algo pr\u00f3ximo ao ActionScript [exemplo f\u00e1cil s\u00f3 para um termo [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,38],"tags":[334,372],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1407"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=1407"}],"version-history":[{"count":5,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1407\/revisions"}],"predecessor-version":[{"id":1412,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1407\/revisions\/1412"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=1407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=1407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=1407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}