CoffeeScript: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
+cat, tmp
m Elimino wikilink da parametri editore, città, anno di {{Cita libro}} come da manuale
 
(26 versioni intermedie di 21 utenti non mostrate)
Riga 1:
{{tmp|Linguaggio di programmazione}}
|autore = Jeremy Ashkenas
'''CoffeeScript'''&nbsp;è un linguaggio di programmazione che si [[transcompila]] in [[JavaScript]]. Esso aggiunge lo&nbsp;[[zucchero sintattico]]&nbsp;ispirato da [[Ruby]], [[Python]] e [[Haskell]]&nbsp;nel tentativo di accrescere la leggibilità e concisione di JavaScript.<ref name="thelittlebookoncoffeescript">{{Cita libro|title=The Little Book on CoffeScript|author=Alex MacCaw|publisher=[[O'Reilly Media]]|date=January 2012|isbn=978-1-4493-2105-5}}</ref>&nbsp;Specifiche funzionalità aggiuntive includono la [[comprensione di lista]]&nbsp;e la [[ricerca di corrispondenza]].
|immagine = CoffeeScript-logo.svg
|data = 13 dicembre 2009
|versione = 2.5.1 rilasciata il 31 gennaio 2020
|utilizzo = Sviluppo di applicazioni web
|paradigmi = Funzionale, imperativo, scripting
|tipizzazione = Inesistente
|estensione = <code>.coffee</code>, <code>.litcoffee</code>
|influenzato_da = [[JavaScript]], [[Perl]], [[Haskell (linguaggio di programmazione)|Haskell]], [[Python]], [[YAML]], [[Ruby (linguaggio di programmazione)|Ruby]]
|ha_influenzato = MoonScript, [[JavaScript]]
|sistema_operativo = Cross-Platform
|licenza = MIT
}}
 
'''CoffeeScript'''&nbsp;è un linguaggio di programmazione che si [[transcompila]] in [[JavaScript]]. Esso aggiunge lo&nbsp;[[zucchero sintattico]]&nbsp;ispirato da [[Ruby (linguaggio di programmazione)|Ruby]], [[Python]] e [[Haskell (linguaggio di programmazione)|Haskell]]&nbsp;nel tentativo di accrescere la leggibilità e concisione di JavaScript.<ref name="thelittlebookoncoffeescript">{{Cita libro|titletitolo=The Little Book on CoffeScript|authoranno=2012|url=https://archive.org/details/littlebookoncoff0000macc|autore=Alex MacCaw|publishereditore=[[O'Reilly Media]]|datedata=January 2012|isbn=978-1-4493-2105-5}}</ref>&nbsp;Specifiche funzionalità aggiuntive includono la [[comprensione di lista]]&nbsp;e la [[ricerca di corrispondenza]].
Il supporto di CoffeeScript è incluso nella versione 3.1 di [[Ruby on Rails]].<ref>, Joshua. </ref>&nbsp;Nel 2011, [[Brendan Eich]] fece riferimento a CoffeeScript come un'influenza nei suoi pensieri sul futuro di JavaScript.<ref>Eich, Brendan. </ref>
 
Il supporto di CoffeeScript è incluso nella versione 3.1 di [[Ruby on Rails]].<ref>, Joshua. </ref>&nbsp;Nel 2011, [[Brendan Eich]] fece riferimento a CoffeeScript come un'influenza nei suoi pensieri sul futuro di JavaScript.<ref>Eich, Brendan. </ref>
 
== Storia ==
Il 13 dicembre 2009 Jeremy Ashkenas fece il suo primo commit Git di CoffeeScript con il commento: "commit iniziale del linguaggio misterioso."<ref>Github. [https://github.com/jashkenas/coffee-script/commit/8e9d637985d2dc9b44922076ad54ffef7fa8e9c2 'initial commit of the mystery language']</ref> Il compilatore era scritto in Ruby. Il 24 dicembre egli creò la prima release taggata e commentata, 0.1.0. Il 21 febbraio 2010 eseguì il commit della versione 0.5, che sostituì il compilatore Ruby con una versione [[ self-hosting]]&nbsp;in CoffeeScript puro. A quel punto il progetto aveva attratto svariati altri contributori su GitHub, e stava ricevendo più di 300 visualizzazioni di pagina al giorno.
 
Il 24 dicembre 2010 Ashkenas annunciò il rilascio della versione stabile 1.0.0 a [[Hacker News]], il sito dove il progetto era stato annunciato per la prima volta.<ref>Hacker News. </ref>
 
== Sintassi ==
Line 17 ⟶ 31:
 
=== Test d'intervallo ===
Per calcolare l'indice di massa corporea, qualcuno potrebbe scrivere (in JavaScript):<sourcesyntaxhighlight lang="javascript" line="1">
varlet mass = 72;
varlet height = 1.78;
varconst BMI = mass / (height ** height2);
if (18.5 < BMI && BMI < 25) && alert('You are healthy!');
</sourcesyntaxhighlight>Con CoffeeScript l'intervallo è direttamente descritto:<sourcesyntaxhighlight lang="coffeescript">
mass = 72
height = 1.78
BMI = mass / height**2
alert 'You are healthy!' if 18.5 < BMI < 25
</syntaxhighlight>
</source>
 
=== Cicli e comprensioni ===
Per calcolare il [[Massimo comune divisore|massimo comun divisore]]&nbsp;di due interi con l'[[algoritmo di Euclide]], in JavaScript c'è bisogno solitamente di un ciclo ''while'':<sourcesyntaxhighlight lang="javascript">
function gcd(x, y) {
var z
Line 40 ⟶ 54:
return x
}
</sourcesyntaxhighlight>MenteMentre in CoffeeScript si può invece usare&nbsp;<code>until</code> e il pattern-matching:<sourcesyntaxhighlight lang="coffeescript">
gcd = (x, y) ->
[x, y] = [y, x%y] until y is 0
x
</sourcesyntaxhighlight>Qualsiasi ciclo ''for''&nbsp;può essere rimpiazzato da una comprensione di lista; in tal modo per calcolare il quadrato dei numeri dispari positivi più piccoli di dieci (quindi i numeri il quale resto di modulo 2 è 1), si può fare:<sourcesyntaxhighlight lang="coffeescript">
alert n*n for n in [1..10] when n%2 is 1
</sourcesyntaxhighlight>Alternativamente, c'è:<sourcesyntaxhighlight lang="coffeescript">
alert n*n for n in [1..10] by 2
</sourcesyntaxhighlight>Si può implementare una [[Ricerca lineare|ricerca]] sequenziale&nbsp;con un&nbsp;<sourcesyntaxhighlight lang="coffeescript">
names = ["Ivan", "Joanna", "Nikolay", "Mihaela"]
linearSearch = (searchName) -> alert(name) for name in names when name is searchName
</sourcesyntaxhighlight>La sintassi&nbsp;<code>for ... in</code> permette di ciclare su array, mentre la sintassi&nbsp;<code>for ... of</code> permette di ciclare su oggetti.
 
Si può utilizzare la parola chiave&nbsp;<code>?</code>&nbsp;per controllare velocemente se una variabile è&nbsp;<code>null</code> o<code>undefined</code> :<sourcesyntaxhighlight lang="coffeescript">
personCheck = ->
if not person? then alert("No person") else alert("Have person")
Line 60 ⟶ 74:
person = "Ivan"
personCheck()
</sourcesyntaxhighlight>Questo altererebbecodice mostrerà a schermo "No person" se la variabile fosseè&nbsp;<code>null</code> o&nbsp;<code>undefined</code> e "Have person" se cic'è fossepresente qualcosa.
 
=== Funzioni e jQuery ===
Un frammento JavaScript comune utilizzando la libreria jQuery è:<sourcesyntaxhighlight lang="javascript">
$(document).ready(function() {
// Initialization code goes here
})
</sourcesyntaxhighlight>Oppure solo:<sourcesyntaxhighlight lang="javascript">
$(function() {
// Initialization code goes here
})
</sourcesyntaxhighlight>In CoffeeScript, la parola chiave <code>function</code> è sostituita dal simbolo&nbsp;<code>-></code>&nbsp;, e viene usata l'indentazione invece che le parentesi graffe, come in altri linguaggi [[off-side rule]]&nbsp;come [[Python]] e [[Haskell (linguaggio di programmazione)|Haskell]]. Inoltre, le parentesi possono essere generalmente omesse, usando invece il livello d'[[indentazione]] per denotare una funzione o blocco. Quindi, l'equivalente CoffeeScript del frammento sopra è:<sourcesyntaxhighlight lang="coffeescript">
$(document).ready ->
# Initialization code goes here
</sourcesyntaxhighlight>O solo:<sourcesyntaxhighlight lang="coffeescript">
$ ->
# Initialization code goes here
</syntaxhighlight>
</source>
 
=== Interpolazione di stringhe ===
L'interpolazione di stringhe in stile Ruby è inclusa in CoffeScript. Le stringhe con doppi apici permettono valori interpolati, usando #{ ... }, e le stringhe con singolo apice sono literal.<sourcesyntaxhighlight lang="coffeescript">
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
 
sentence = "#{ 22 / 7 } is a decent approximation of π"
</syntaxhighlight>
</source>
 
== Compilazione ==
Il compilatore CoffeeScript è stato scritto in CoffeeScript dalla versione 0.5 ed è disponibile come un'utility [[Node.js]]; comunque, il nucleo del compilatore non si affida a Node.js e può essere eseguito in qualsiasi ambiente JavaScript.<ref>[httphttps://jashkenas.github.com/coffee-script/#installation CoffeeScript] {{webarchive|url=https://web.archive.org/web/20091227041459/http://jashkenas.github.com/coffee-script/ |data=27 dicembre 2009 }}.</ref>&nbsp;Un'alternativa all'utility Node.js è il Plugin Maven Coffee, un plugin per il sistema di build [[Apache Maven]]. Il plugin usa il motore JavaScript Rhino scritto in Java.
 
Il sito ufficiale CoffeeScript.org ha un bottone "Prova CoffeeScript" nella barra del menu; cliccandolo viene aperta una finestra in cui l'utente può scrivere codice CoffeeScript, vedere l'output JavaScript ed eseguirlo direttamente nel browser. Il sito js2coffee<ref>{{Cita web|url=http://js2.coffee|titletitolo=js2coffee|lastcognome=Sta Cruz|firstnome=Rico|accessdateaccesso=11 Maymaggio 2014}}</ref>&nbsp;fornisce una traduzione bi-direzionale.
 
== Ultime aggiunte ==
Line 99 ⟶ 113:
Il 13 settembre 2012 [[Dropbox]]&nbsp;ha annunciato che i suoi codebase lato browser sono stati riscritti da JavaScript a CoffeeScript.
 
La guida interna di stile di GitHub una volta disse "scrivi nuovo JS in CoffeeScript", e anche se non lo dice più, tutti i consigli in quella guida di stile si riferiscono a come scrivere un buon CoffeeScript, e il loro editor di testo Atom è anchessoanch'esso scritto in quel linguaggio.
 
== Vedi ancheNote ==
<references/>
* Amber Smalltalk
* [[Haxe]]
* [[DART (linguaggio)|Dart]]
* Opa
* [[TypeScript]], un rigoroso superinsieme open-source di linguaggio JavaScript da&nbsp;[[Microsoft]]
* [http://rapydscript.pyjeon.com/ RapydScript],<ref>{{Cita web|url=https://bitbucket.org/pyjeon/rapydscript|title=Rapydscript bitbucket repository|date=3 Apr 2013|website=Atlassian Bitbucket|accessdate=11 May 2014}}</ref>&nbsp;un traduttore con una sintassi più Pythonic
* LiveScript
* [http://ckknight.github.io/gorillascript/ GorillaScript], che offre controlli di tipi aggiuntivi e zucchero sintattico per pattern JS comuni come callback in linea
 
== ReferenceBibliografia ==
* {{Cita pubblicazione|first1nome=Patrick|last1cognome=Lee|datedata=May 14, maggio 2014|titletitolo=CoffeeScript in Action|editionedizione=First|publishereditore=[[Manning Publications]]|pagep=432|isbn=978-16172906261-61729-062-6|url=httphttps://www.amazon.com/dp/1617290629}}
{{Reflist|30em}}
* {{Cita pubblicazione|first1nome=Geoffrey|last1cognome=Grosenbach|datedata=May 12, maggio 2011|titletitolo=Meet CoffeeScript|editionedizione=First|publishereditore=[[PeepCode]]|url=https://peepcode.com/products/coffeescript|postscripturlmorto=<!--None-->sì|urlarchivio=https://web.archive.org/web/20110616014711/http://peepcode.com/products/coffeescript|dataarchivio=16 giugno 2011}}
* {{Cita pubblicazione|first1nome=Mark|last1cognome=Bates|datedata=May 31, maggio 2012|titletitolo=Programming in CoffeeScript|editionedizione=First|publishereditore=[[Addison-Wesley]]|pagep=350|isbn=0-321-82010-X|url=http://my.safaribooksonline.com/book/-/9780132946155|accesso=12 luglio 2016|dataarchivio=10 giugno 2016|urlarchivio=https://web.archive.org/web/20160610180706/http://my.safaribooksonline.com/book/-/9780132946155|urlmorto=sì}}
* {{Cita pubblicazione|first1nome=Alex|last1cognome=MacCaw|datedata=January 31, gennaio 2012|titletitolo=The Little Book on CoffeeScript|editionedizione=First|publishereditore=[[O'Reilly Media]]|pagep=62|isbn=978-14493210551-4493-2105-5|url=https://arcturo.github.com/library/coffeescript/|accesso=30 aprile 2019|dataarchivio=2 gennaio 2012|urlarchivio=https://web.archive.org/web/20120102011208/http://arcturo.github.com/library/coffeescript/|urlmorto=sì}}
* {{Cita pubblicazione|first1nome=Trevor|last1cognome=Burnham|datedata=August 3, agosto 2011|titletitolo=CoffeeScript: Accelerated JavaScript Development|editionedizione=First|publishereditore=[[Pragmatic Bookshelf]]|pagep=138|isbn=978-19343567841-934356-78-4|url=httphttps://pragprog.com/book/tbcoffee/coffeescript|accesso=30 aprile 2019|urlarchivio=https://web.archive.org/web/20190303003953/https://pragprog.com/book/tbcoffee/coffeescript|dataarchivio=3 marzo 2019|urlmorto=sì}}
 
== LettureVoci più approfonditecorrelate ==
* [[Haxe]]
* {{Cita pubblicazione|first1=Patrick|last1=Lee|date=May 14, 2014|title=CoffeeScript in Action|edition=First|publisher=[[Manning Publications]]|page=432|isbn=978-1617290626|url=http://www.amazon.com/dp/1617290629}}
* [[DARTDart (linguaggio di programmazione)|Dart]]
* {{Cita pubblicazione|first1=Geoffrey|last1=Grosenbach|date=May 12, 2011|title=Meet CoffeeScript|edition=First|publisher=[[PeepCode]]|url=https://peepcode.com/products/coffeescript|postscript=<!--None-->}}
* [[TypeScript]]
* {{Cita pubblicazione|first1=Mark|last1=Bates|date=May 31, 2012|title=Programming in CoffeeScript|edition=First|publisher=[[Addison-Wesley]]|page=350|isbn=0-321-82010-X|url=http://my.safaribooksonline.com/book/-/9780132946155}}
* {{Cita pubblicazione|first1=Alex|last1=MacCaw|date=January 31, 2012|title=The Little Book on CoffeeScript|edition=First|publisher=[[O'Reilly Media]]|page=62|isbn=978-1449321055|url=http://arcturo.github.com/library/coffeescript/}}
* {{Cita pubblicazione|first1=Trevor|last1=Burnham|date=August 3, 2011|title=CoffeeScript: Accelerated JavaScript Development|edition=First|publisher=[[Pragmatic Bookshelf]]|page=138|isbn=978-1934356784|url=http://pragprog.com/book/tbcoffee/coffeescript}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* [coffeescript.org Sito ufficiale]
* [https://github.com/jashkenas/coffeescript coffee-script] su GitHub
* [http://rapydscript.pyjeon.com/ RapydScript],<ref> {{Cita webWebarchive|url=https://bitbucketweb.archive.org/pyjeonweb/20160405144723/http://rapydscript|title=Rapydscript bitbucket.pyjeon.com/ repository|date=35 Apraprile 2013|website=Atlassian Bitbucket|accessdate=112016 May 2014}}</ref>&nbsp;, un traduttore con una sintassi più Pythonic
* [httphttps://ckknight.github.io/gorillascript/ GorillaScript], che offre controlli di tipi aggiuntivi e zucchero sintattico per pattern JS comuni come callback in linea
 
{{Controllo di autorità}}
{{Portale|Informatica}}
[[Categoria:Linguaggi di programmazione]]