Logo języka | |
| Pojawienie się | 13 grudnia 2009; około 16 lat temu |
|---|---|
| Paradygmat | wieloparadygmatowy:bazujący na prototypach,imperatywny,funkcyjny,skryptowy |
| Typowanie | |
| Aktualnawersja stabilna | 2.7.0 |
| Twórca | Jeremy Ashkenas |
| Licencja | |
| Platforma sprzętowa | |
| Platforma systemowa | |
| Strona internetowa | |
CoffeeScript –język programowania transpilowany doJavaScriptu. CoffeeScript dodajelukier składniowy zainspirowany przezRuby’ego iPythona, aby zwiększyć łatwość użycia[1]. Język oferuje także bardziej wyrafinowane możliwości, takie jakprzetwarzanie tablic idopasowywanie do wzorców.
CoffeeScript cieszy się stosunkowo dużą popularnością w społeczności programistówRuby’ego. TwórcyRuby on Rails stworzyli na jego baziesystem szablonów i sam CoffeeScript był również jedną z bibliotek dostarczanych z Ruby on Rails od wersji 3.1.Brendan Eich stwierdził, że CoffeeScript miał wpływ na wersje ES6 językaJavaScript.
W dniu 13 grudnia 2009 rokuJeremy Ashkenas(inne języki) wykonał pierwszy commit (Git) dla CoffeeScript z komentarzem: „initial commit of the mystery language”[2].Transpilator (parser ilekser) został napisany w językuRuby[2]. Oficjalne, wstępne wydanie pojawiło się 24 grudnia tego samego roku[3].
Na początku 2010 roku Ashkenas wydał wersję 0.5, w której kluczową zmianą było zastąpienie Ruby'ego przez transpilator pisany w CoffeeScript z nakładką utworzoną za pomocągeneratora parserów Jison (podobnego doBisona)[1]. Jison tworzył kod JavaScript, więc możliwe stało się uruchomienie CS wNode.js[4]. Na tym etapie autor ostrzegał jeszcze o niestabilności CS, w szczególności o możliwych, znacznych zmianach składni CS[1].
W listopadzie 2010 twórcyRuby on Rails wydali nowy system szablonów bazujący na CoffeScript[5]. Natomiast 24 grudnia 2010 roku Ashkenas na portaluHacker News(inne języki) ogłosił wydanie stabilnej wersji 1.0.0[6][7]. W sierpniu 2011, wraz z wydaniemRuby on Rails w wersji 3.1, CoffeeScript stał się jedną z bibliotek dostarczanych w ramach platformy RoR[8].
W 2011Brendan Eich, jeden z członków komitetuTC39, przyznał, że CoffeScript jest „dobrze wykonany i wygodniejszy w użyciu niż JS” (wówczasES5)[9]. Jednocześnie zauważył, że CS jako swoistypolyfill nie będzie miał szans osiągnąć podobnej wydajności do JS i to JS powinien się zmieniać w kierunku wygody użycia znanej z CS[9]. W swoim artykule porównywał CS z propozycjami, które zamierza przedstawić TC39 w pracach nad „Harmony” (wersja JS, która później przerodziła się w ES6)[9].Parametry resztkowe orazwyrażenia lambda (funkcje strzałkowe) znane z CS pojawiły się później w podobnej formie w JS, w tym w wersji ES6 znanej później jakoES2015[1][10][11].
13 września 2012 rokuDropbox ogłosił, że ichkod po stronie przeglądarki został przepisany zJavaScript na CoffeeScript, jednak w maju 2017 roku przeniesiono go doTypeScript[12][13].
18 września 2017 roku wydano wersję 2.0.0, która „ma na celu przyniesienie CoffeeScript do współczesnej ery JavaScript, zamykając luki w kompatybilności z JavaScript i jednocześnie zachowując czystą składnię, która jest znakiem rozpoznawczym CoffeeScript”[14].
Kompilator CoffeeScript jestself-hosting(inne języki) od wersji 0.5 i jest dostępny jako pakietNode.js; jednak rdzeń transpilatora nie wymaga Node.js do działania i można go uruchomić w dowolnym środowiskuJavaScript[15]. Jedną z alternatyw dlaNode.js jest Coffee Maven Plugin, plugin dla systemu budowaniaApache Maven[16]. Istnieje również oficjalny gem Ruby, który jest narzędziem pomostowym do kompilacji CS[17].
Oficjalna strona na CoffeeScript.org zawiera pola tekstowe, które nie tylko na żywo kompilują CoffeeScript do kodu JavaScript, ale również umożliwiają uruchomienie go bezpośrednio w przeglądarce[18].
Typowy fragment kodu JavaScript z użyciem bibliotekijQuery:
$(document).ready(function(){// Kod inicjalizacyjny});
W CoffeeScript słowo kluczowefunction jest zastąpione przez symbol->. Wcięcia zastępują nawiasy klamrowe, podobnie jak wPythonie. Dodatkowo, najczęściej nawiasy mogą być pominięte. Analogiczny do powyższego fragment kodu w CoffeeScript wygląda następująco:
$(document).ready-># Kod inicjalizacyjny
Lub krócej, co wynika z definicji skróconego użycia kodu$(document).ready():
$-># Kod inicjalizacyjny
OdES2015 ten sam kod w JavaScript można zapisać tak:
$(()=>{// Kod inicjalizacyjny});
| 1GL | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2GL/ Język drugiej generacji/ Asembler | |||||||||||||||
| 3GL / Język trzeciej generacji |
| ||||||||||||||
| 4GL/ Język czwartej generacji/ Język dziedzinowy |
| ||||||||||||||
| 5GL/Logiczne | |||||||||||||||
| Ezoteryczne | |||||||||||||||
| Inne |