CoffeeScript är ett programmeringsspråk som kompileras till JavaScript, utformat för att förbättra läsbarheten och kortheten av JavaScript-koden genom en renare syntax och minskning av boilerplate-kod. Det främjar en mer sofistikerad programmeringsstil, starkt inspirerad av Python och Ruby, och syftar därmed till att göra utvecklingsprocessen smidigare, särskilt för webbapplikationer. CoffeeScript var också utformat för att hjälpa utvecklare att skriva kod snabbare och tydligare, samtidigt som det fortfarande kompileras ner till standard JavaScript, vilket gör att det kan köras i alla webbläsare eller miljöer som stöder JavaScript.
CoffeeScript skapades av Jeremy Ashkenas och släpptes första gången 2009. Språket föddes ur behovet av att förenkla JavaScript, som, trots sin allestädes närvaro inom webbutveckling, hade blivit besvärligt och ofta omständligt på grund av sina syntaktiska krav. Utvecklare sökte efter sätt att skriva renare, mer underhållbar kod, och Ashkenas använde möjligheten att implementera en ny syntax som skulle kännas mer naturlig och uttrycksfull.
CoffeeScript hämtar betydande inspiration från Python och Ruby, två språk kända för sin eleganta och koncisa syntax. Språket fick snabbt fäste, särskilt när webbutvecklingsgemenskapen började omfamna ramverk som Node.js och Backbone.js, som gynnades av en mer strömlinjeformad syntax. Framväxten av front-end-ramverk som AngularJS och React gav också en annan plattform för användning av CoffeeScript.
I dagsläget har CoffeeScripts popularitet minskat i jämförelse med sina tidiga år, främst på grund av framkomsten av ES6 (ECMAScript 2015), som introducerade många funktioner som CoffeeScript strävade efter att tillhandahålla, såsom pilfunktioner, klasser och mallsträngar. Gemenskapen kring CoffeeScript är fortfarande aktiv, och det används fortfarande inom vissa äldre projekt, men många utvecklare väljer nu att hålla sig till modern JavaScript.
En av de mest slående funktionerna i CoffeeScript är dess användning av indentering för att ange omfång, vilket eliminerar behovet av klamrar.
square = (x) ->
x * x
Funktionsdefinitioner i CoffeeScript är kortfattade och kan deklareras med användning av ->
(eller =>
för bundna funktioner).
add = (a, b) -> a + b
CoffeeScript stöder listkomprehensioner, vilket möjliggör koncis och uttrycksfull arrayskapande.
squares = (x * x for x in [1..5]) # [1, 4, 9, 16, 25]
Stränginterpolation är enkel, vilket gör det lättare att konstruera strängar med variabler.
name = "World"
greeting = "Hello, #{name}!" # "Hello, World!"
Att definiera klasser och utöka dem är sömlöst i CoffeeScript, vilket ger en renare syntax än JavaScript.
class Animal
constructor: (@name) ->
class Dog extends Animal
bark: -> console.log "#{@name} barks."
CoffeeScript använder splat-operatorn (...
) för att skicka en array som separata argument.
multiply = (args...) ->
result = 1
for arg in args
result *= arg
result
Du kan också ställa in standardparametrar när du definierar funktioner.
greet = (name = "stranger") -> "Hello, #{name}!"
Destrukturering möjliggör mer koncisa tilldelningar från arrayer och objekt.
[a, b] = [1, 2]
{foo, bar} = {foo: "Hello", bar: "World"}
unless
-satsenCoffeeScript introducerar unless
-satsen som ett mer läsbart alternativ till if not
.
unless isRaining
console.log "Let's go outside!"
CoffeeScript har fat arrow (=>
) som bevarar kontexten av this
, liknande JavaScripts pilfunktioner.
button.addEventListener 'click', =>
console.log "Button clicked!"
CoffeeScript inkluderar en kompilator som tar .coffee
-filer som indata och ger ut standard JavaScript. Denna kompilator kan köras direkt i kommandoraden eller integreras i byggsystem som Grunt och Gulp.
De flesta populära IDE:er och textredigerare som Visual Studio Code, Atom och Sublime Text erbjuder plugins för CoffeeScript-stöd, inklusive syntaxmarkering och integrerad kompilering.
För att kompilera ett CoffeeScript-projekt kan du helt enkelt använda kommandot:
coffee -c project.coffee
Du kan också övervaka filer för ändringar på följande sätt:
coffee -w -c project.coffee
CoffeeScript har främst använts inom webbutveckling, särskilt för klientsideskriptning i SPA (Single Page Applications). Ramverk som Backbone.js och Rails har använt CoffeeScript, och många produktionsapplikationer finns fortfarande som byggdes med språket.
CoffeeScript fungerar som en syntaktisk sockerbit ovanpå JavaScript, vilket möjliggör en mer koncis och läsbar kodningsstil. JavaScript stöder inte funktioner som listkomprehensioner och splat-operatorer nativt, vilket gör CoffeeScript attraktivt för vissa användningsfall.
Även om CoffeeScript passar bra in i JavaScript-ekosystemet, erbjuder Python mer omfattande bibliotek och ramverk för dataanalys, vetenskaplig beräkning och webbutveckling. CoffeeScript är särskilt bättre lämpad för front-end-utveckling.
CoffeeScript och Ruby delar idiomatiska uttryck, men CoffeeScripts syfte är tätt fokuserat på interoperabilitet med JavaScript. Ruby är ett mer allmänt språk med ett rikt ekosystem men saknar direkt webbläsarkompilering.
TypeScript erbjuder statisk typkontroll som kan hjälpa till att fånga fel vid kompilering. CoffeeScript, å sin sida, fokuserar enbart på att förenkla JavaScript-syntax utan typkontroll.
Ett av de mest användbara käll-till-källa översättningsverktygen för CoffeeScript inkluderar CoffeeScript-ES6 som kan konvertera CoffeeScript till ES6 JavaScript. Dessutom kan Babel hantera JavaScript-transformationer, vilket gör det möjligt för utvecklare att arbeta med moderna JavaScript-funktioner samtidigt som de stöder äldre versioner.
När man översätter från CoffeeScript är det viktigt att överväga hur man hanterar indentering korrekt eftersom det är syntaktiskt betydelsefullt och hur man effektivt omvandlar CoffeeScripts funktioner till sina motsvarigheter i andra språk.