CoffeeScript
Paradigma | Multi-Paradigma: Prototypbasiert, funktional, Imperativ, Scripting |
---|---|
Entworfen von | Jeremy Ashkenas |
Entwickler | Jeremy Ashkenas |
Erstmals erschienen | 13. Dezember 2009 |
Stabile Version | 2.6.1[1] / 4. Oktober 2021 |
Disziplin tippen | dynamisch, implizit |
OS | Plattformübergreifend |
Lizenz | MIT -Lizenz |
Dateiname -Erweiterungen | .Kaffee , .Litcoffee |
Webseite | Coffeescript |
Beeinflusst von | |
Haskell, JavaScript, Perl, Python,[2] Rubin, Yaml[3] | |
Beeinflusst | |
Moonskript, Livescript, JavaScript |
CoffeeScript ist ein Programmiersprache das kompiliert JavaScript.Es fügt hinzu syntethischer Zucker inspiriert von Rubin, Python, und Haskell Um die Kürze und Lesbarkeit von JavaScript zu verbessern.[4] Zu den spezifischen zusätzlichen Funktionen gehören Listenverständnis und Zerstörungsaufgabe.
Coffeescript -Unterstützung ist in enthalten Rubin auf Schienen Version 3.1[5] und Play Framework.[6] In 2011, Brendan Eich In Coffeescript als Einfluss auf seine Gedanken über die Zukunft von JavaScript beantragt.[7][8]
Geschichte
Am 13. Dezember 2009, Jeremy Ashkenas machte den ersten Git Commit für CoffeeScript mit dem Kommentar: "Erstes Feststellungen der mysteriösen Sprache".[9] Der Compiler wurde in Ruby geschrieben. Am 24. Dezember machte er die erste markierte und dokumentierte Veröffentlichung, 0.1.0. Am 21. Februar 2010 beging er Version 0.5, der den Ruby Compiler durch a ersetzte Selbsthosting Version in reinem Kaffeeskript. Zu diesem Zeitpunkt hatte das Projekt mehrere andere Mitwirkende angezogen GitHubund erhielt über 300 Seiten Treffer pro Tag.
Am 24. Dezember 2010 kündigte Ashkenas die Veröffentlichung von Stable 1.0.0 bis bekannt Hacker News, die Website, an der das Projekt zum ersten Mal bekannt gegeben wurde.[10][11]
Am 18. September 2017 wurde Version 2.0.0 eingeführt,[12] Das "zielt darauf ab, CoffeeScript in die moderne JavaScript -Ära zu bringen und Lücken in der Kompatibilität mit JavaScript zu schließen und gleichzeitig die saubere Syntax zu erhalten, die Coffeescript's Markenzeichen ist".
Syntax
Fast alles ist ein Ausdruck Zum Beispiel in Coffeescript, wenn
, Schalter
und zum
Ausdrücke (die in JavaScript keinen Rückgabewert haben) geben einen Wert zurück. Wie in PerlDiese Kontrollanweisungen haben auch Postfix -Versionen. zum Beispiel, wenn
kann auch geschrieben werden Folgen Sie, wenn Bedingung
bilden.
Viele unnötige Klammern und Zahnspangen können weggelassen werden; Beispielsweise können Codeblöcke durch Einklemmen anstelle von Klammern bezeichnet, Funktionsaufrufe sind implizit und Objektliterale werden häufig automatisch erkannt.
Um die zu berechnen Body Mass Index in JavaScript, man könnte schreiben:
Const Masse = 72 Const Höhe = 1.78 Const BMI = Masse / Höhe ** 2 wenn (18.5 <= BMI && BMI < 25) { Alarm('Du bist gesund!') }
Mit Coffeescript wird das Intervall direkt beschrieben:
Masse = 72 Höhe = 1.78 BMI = Masse / Höhe**2 Alarm 'Du bist gesund!' wenn 18.5 <= BMI < 25
Um die zu berechnen größter gemeinsamer Teiler von zwei Ganzzahlen mit dem Euklidischer AlgorithmusIn JavaScript braucht man normalerweise a während Schleife:
GCD = (x, y) => { tun { [x, y] = [y, x%y]; } während (y ! == 0) Rückkehr x }
Während man in Coffeescript verwenden kann bis um
[13] stattdessen:
gcd = (x, y) -> [x, y] = [y, x%y] bis um y ist 0 x
Das ?
Das Schlüsselwort überprüft schnell, ob eine Variable ist Null
oder nicht definiert
:
PersonCheck = -> wenn nicht Person? dann Alarm("Keine Person") anders Alarm("Have Person") Person = Null Personcheck() Person = "Ivan" Personcheck()
Dies würde "keine Person" alarmieren, wenn die Variable ist Null
oder nicht definiert
und "haben Person haben", wenn es etwas gibt.
Ein gemeinsamer Pre-ES6-JavaScript-Snippet mit dem JQuery Bibliothek ist:
$(dokumentieren).bereit(Funktion() { // Initialisierungscode geht hierher })
Oder sogar nur:
$(Funktion() { // Initialisierungscode geht hierher })
In Coffeescript die Funktion
Schlüsselwort wird durch die ersetzt ->
Symbol und Einkerbung werden anstelle von lockigen Zahnspangen verwendet, wie in anderen Off-Side-Regel Sprachen wie Python und Haskell. Außerdem können Klammern normalerweise weggelassen werden, um eine Einklingelebene zu verwenden, um stattdessen eine Funktion oder einen Block zu bezeichnen. Somit lautet das Kaffeekriptäquivalent des obigen Snippets:
$(dokumentieren).bereit -> # Initialisierungscode geht hierher
Oder nur:
$ -> # Initialisierungscode geht hierher
Die String-Interpolation im Ruby-Stil ist in Coffeescript enthalten. Doppelte zitierte Zeichenfolgen ermöglichen interpolierte Werte mit #{...} und einzeln zitierte Zeichenfolgen sind wörtlich.[14]
Autor = "Wittgenstein" zitat = "Ein Bild ist eine Tatsache. - #{ Autor }" Satz = "#{ 22 / 7 } ist eine anständige Näherung von π "
Irgendein zum Schleife kann durch a ersetzt werden Listenverständnis; Damit die Quadrate der positiven ungeraden Zahlen kleiner als zehn (d. H. Zahlen, deren Restmodulo 2 1 ist), kann man dies tun:
Alarm n*n zum n in [1..10] Wenn n%2 ist 1
Alternativ gibt es:
Alarm n*n zum n in [1..10] durch 2
A Lineare Suche Kann mit einem Ein-Liner mit dem WO-Keyword implementiert werden:
Namen = ["Ivan", "Joanna", "Nikolay", "Mihaela"] linearsearch = (SearchName) -> Alarm(Name) zum Name in Namen Wenn Name ist SearchName
Das für in
Die Syntax ermöglicht das Schleifen über Arrays, während die für ... von
Die Syntax ermöglicht das Schleifen über Objekten.
Coffeescript wurde wegen seiner ungewöhnlichen Kritikpunkte kritisiert Scoping Regeln.[15][16] Insbesondere macht es völlig widerlegt variabler Schatten Dies macht die Begründung über den Code schwieriger und fehleranfälliger in einigen grundlegenden Programmiermustern, die seitdem als selbstverständlich erstellt und als selbstverständlich angesehen werden Verfahrensprogrammierung Prinzipien wurden definiert.
Zum Beispiel muss der folgende Code -Snippet in JavaScript nicht außerhalb des {}
-Block, um sicher zu wissen, dass es nicht möglich ist Foo
Die Variable im äußeren Bereich kann übrigens überschrieben werden:
// ... Funktion Baz() { var Foo = "Bar" Konsole.Protokoll(`foo = $ {Foo}`) } // ... }
In Coffeescript gibt es keine Möglichkeit zu erkennen, ob der Umfang einer Variablen auf einen Block begrenzt ist oder nicht, ohne außerhalb des Blocks zu schauen.
Entwicklung und Verteilung
Der Coffeescript -Compiler war Selbsthosting seit Version 0.5 und ist als erhältlich Node.js Dienstprogramm; Der Kern Compiler stützt sich jedoch nicht auf node.js und kann in jedem ausgeführt werden JavaScript Umgebung.[17] Eine Alternative zur Node.js Dienstprogramm ist das Kaffee -Maven -Plugin, ein Plugin für die Apache Maven System aufbauen. Das Plugin verwendet das Nashorn JavaScript -Engine geschrieben in Java.
Die offizielle Website von coffeeescript.org verfügt über eine "Versuch CoffeeScript" -Taste in der Menüleiste. Wenn Sie darauf klicken, wird ein modales Fenster geöffnet, in dem Benutzer Coffeescript eingeben können, die JavaScript -Ausgabe sehen und direkt im Browser ausführen können. Die JS2Coffee[18] Die Website bietet bidirektionale Übersetzung.
Neueste Ergänzungen
- Mit Source Maps können Benutzer ihren CoffeeScript -Code direkt debuggen und Coffeescript Tracebacks bei Laufzeitfehlern unterstützen.
- Coffeescript unterstützt eine Form von Lemerkörperprogrammierung, Verwendung der
.Coffee.md
oder.Litcoffee
Dateierweiterung. Dadurch kann der Quellcode von CoffeeScript geschrieben werden Markdown. Der Compiler behandelt alle eingebauten Blöcke (Markdowns Art und Weise, Quellcode anzuzeigen) als Code und ignoriert den Rest als Kommentare.
Erweiterungen
ICED CoffeeScript ist ein Superet von Coffeescript, das zwei neue Schlüsselwörter hinzufügt: erwarten
und verschieben
. Diese Ergänzungen vereinfachen den asynchronen Steuerfluss und lassen den Code eher wie a aussehen Verfahrensprogrammierung Sprache, eliminieren Sie die Rückrufkette. Es kann auf der Serverseite und im Browser verwendet werden.[19]
Annahme
Am 13. September 2012, Dropbox kündigte an, dass ihre Browser-Codes-Basis neu geschrieben worden war JavaScript nach Coffeescript,[20] Allerdings wurde es migriert Typoskript 2017.[21]
GitHub"S Internal Style Guide sagte einmal" Schreiben Sie neue JS in CoffeeScript ", obwohl dies nicht mehr der Fall ist. [22] und ihre Atom Texteditor wurde auch in der Sprache geschrieben.[23]
Pixel Game Maker MV Verwendet Coffeescript als Teil seiner Spieleentwicklungsumgebung.[24]
Siehe auch
- Haxe
- NIM (Programmiersprache)
- Amber SmallTalk
- Clojure
- Dart (Programmiersprache)
- Kotlin (Programmiersprache)
- Livescript
- OPA (Programmiersprache)
- ELM (Programmiersprache)
- Typoskript
- Pureskript
Verweise
- ^ "2.6.1". 4. Oktober 2021. Abgerufen 23. Dezember 2021.
- ^ https://coffeescript.org/ "Coffeescript lehnt sich vergleiche aus Python aus"
- ^ Heller, Martin (18. Oktober 2011). "Dreh deine Nase bei Dart hoch und rieche den Coffeescript". InfoWorld. Abgerufen 2020-07-15.
- ^ Alex MacCaw (Januar 2012). Das kleine Buch über Coffecript. O'Reilly Media. ISBN 978-1-4493-2105-5.
- ^ Josh Peek (13. April 2011). "Tweet von Rails Core Teammitglied".
- ^ "AssetsCoffeescript - 2.5.x". www.playframework.com. Abgerufen 2016-10-31.
- ^ Eich, Brendan. "Harmonie meiner Träume"
- ^ Eich, Brendan. "Meine jsconf.us -Präsentation"
- ^ Github. "Erstes Feststellungsausschuss für die mysteriöse Sprache"
- ^ Hacker News. Coffeescript 1.0.0 Ankündigung Gepostet von Jeremy Ashkenas am 24. Dezember 2010
- ^ Hacker News. Originalkaffeeskript -Ankündigung Gepostet von Jeremy Ashkenas am 24. Dezember 2009
- ^ coffeeescript.org Ankündigung von Coffeescript 2
- ^ Coffeescript nennt dies "Musteranpassung", was eine nicht standardmäßige Verwendung dieses Begriffs ist.
- ^ "Offizielle Coffeescript -Seite". Abgerufen 20. November 2013.
- ^ "Das Problem mit implizitem Scoping in Coffeescript". Abgerufen 2018-10-13.
- ^ "Coffeescript's Scoping ist Wahnsinn". Abgerufen 2018-10-13.
- ^ CoffeeScript Archiviert 2012-04-27 bei der Wayback -Maschine. Jashkenas.github.com. Abgerufen am 2013-07-21.
- ^ Staz, Rico. "JS2Coffee". Abgerufen 11. Mai 2014.
- ^ "Offizielle ICEDCoffeescript -Website".
- ^ Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13. September 2012). "Dropbox taucht in Coffeescript ein". Abgerufen 11. Mai 2013.
- ^ Goldstein, David (13. Mai 2020). "Das große Coffeescript to TypeScript -Migration von 2017". Dropbox.tech. Abgerufen 30. Juni 2020.
- ^ "JavaScript · StyleGuide · Github". Github.com. Archiviert von das Original Am 2013-08-15. Abgerufen 2015-11-30.
- ^ Atom -Quellcode. github.com. Abgerufen am 2021-06-26.
- ^ Cullen, Daniel. "Pixel Game Maker MV (PC)". Christus zentriertes Spielen. Abgerufen 15. Januar 2021.
Weitere Lektüre
- Lee, Patrick (14. Mai 2014). Coffeescript in Aktion (First Ed.). Manning Publications. p. 432. ISBN 978-1617290626.
- Grosenbach, Geoffrey (12. Mai 2011). "Meet Coffeescript" (First Ed.). Peepcode.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - Bates, Mark (31. Mai 2012). Programmierung in Coffeescript (First Ed.). Addison-Wesley. p. 350. ISBN 978-0-321-82010-5.
- Maccaw, Alex (31. Januar 2012). Das kleine Buch über Coffeescript (First Ed.). O'Reilly Media. p. 62. ISBN 978-1449321055.
- Burnham, Trevor (3. August 2011). Coffeescript: Beschleunigte JavaScript -Entwicklung (First Ed.). Pragmatischer Bücherregal. p.138. ISBN 978-1934356784.