CoffeeScript er eit programmeringsspråk som kompilerer til JavaScript, designa for å auke lesbarheita og kortheita av JavaScript-koden gjennom ein reinare syntaks og reduksjon av boilerplate-kode. Det fremjar ein meir sofistikert stil for programmering, sterkt inspirert av Python og Ruby, og har som mål å gjere utviklingsprosessen smidigare, spesielt for webapplikasjonar. CoffeeScript vart også designa for å hjelpe utviklarar med å skrive kode raskare og klarare, samtidig som det kompilerer ned til standard JavaScript, som gjer at det kan kjøres i alle nettlesarar eller miljø som støttar JavaScript.
CoffeeScript vart oppretta av Jeremy Ashkenas og først lansert i 2009. Språket vart fødd ut av behovet for å forenkle JavaScript, som, til tross for sin utbreiing i webutvikling, hadde blitt tungvint og ofte omstendelig på grunn av sine syntaktiske krav. Utviklarar såg etter måtar å skrive reinare, meir vedlikehaldbart kode, og Ashkenas nytta sjansen til å implementere ein ny syntaks som ville følast meir naturleg og uttrykksfull.
CoffeeScript hentar betydelig inspirasjon frå Python og Ruby, to språk kjende for sin elegante og konsise syntaks. Språket fekk raskt fotfeste, spesielt ettersom webutviklingssamfunnet byrja å omfamne rammeverk som Node.js og Backbone.js, som hadde nytte av ein meir strømlinjeforma syntaks. Oppkomsten av front-end rammeverk som AngularJS og React gav også ein annan plattform for bruk av CoffeeScript.
Per no har populariteten til CoffeeScript avtatt samanlikna med dei tidlege åra, hovudsakleg på grunn av framkomsten av ES6 (ECMAScript 2015), som introduserte mange funksjonar som CoffeeScript prøvde å tilby, som pilfunksjonar, klassar og malstrenger. Fellesskapet rundt CoffeeScript er framleis aktivt, og det er fortsatt i bruk innan visse eldre prosjekt, men mange utviklarar vel no å halde seg til moderne JavaScript.
Ein av dei mest iøynefallande funksjonane til CoffeeScript er bruken av innrykk for å angi omfang, og dermed eliminerer behovet for krøllparentesar.
square = (x) ->
x * x
Funksjonsdefinisjonar i CoffeeScript er korte og kan bli erklært med bruken av ->
(eller =>
for bundne funksjonar).
add = (a, b) -> a + b
CoffeeScript støttar listekomprehensjonar, som gjer det mogleg å lage arrays på ein konsis og uttrykksfull måte.
squares = (x * x for x in [1..5]) # [1, 4, 9, 16, 25]
Strenginterpolering er enkel, noko som gjer det lettare å konstruere strenger med variablar.
name = "Verden"
greeting = "Hallo, #{name}!" # "Hallo, Verden!"
Å definere klassar og utvide dei er sømløst i CoffeeScript, og gir ein reinare syntaks enn JavaScript.
class Animal
constructor: (@name) ->
class Dog extends Animal
bark: -> console.log "#{@name} bjeffar."
CoffeeScript nyttar splat-operatoren (...
) for å sende ein array som separate argument.
multiply = (args...) ->
result = 1
for arg in args
result *= arg
result
Du kan også sette standardparametrar når du definerer funksjonar.
greet = (name = "fremmed") -> "Hallo, #{name}!"
Destrukturering gjer det mogleg med meir konsise tildelingar frå arrays og objekt.
[a, b] = [1, 2]
{foo, bar} = {foo: "Hallo", bar: "Verden"}
unless
-setningaCoffeeScript introduserer unless
-setninga som eit meir lesbart alternativ til if not
.
unless isRaining
console.log "La oss gå ut!"
CoffeeScript har fat arrow (=>
) som bevarer konteksten til this
, likt som JavaScripts pilfunksjonar.
button.addEventListener 'click', =>
console.log "Knappen vart klikka!"
CoffeeScript inkluderer ein kompilator som tek .coffee
-filer som inngang og gir ut standard JavaScript. Denne kompilatoren kan bli køyrt direkte i kommandolinja eller integrert i byggesystem som Grunt og Gulp.
Dei fleste populære IDE-ar og tekstredigerarar som Visual Studio Code, Atom og Sublime Text tilbyr pluginar for støtte til CoffeeScript, inkludert syntaksutheving og integrert kompilering.
For å kompilere eit CoffeeScript-prosjekt kan du enkelt bruke kommandoen:
coffee -c project.coffee
Du kan også overvake filer for endringar slik:
coffee -w -c project.coffee
CoffeeScript har først og fremst blitt brukt i webutvikling, spesielt for klientside-skripting i SPA (Single Page Applications). Rammeverk som Backbone.js og Rails har nytta CoffeeScript, og mange produksjonsapplikasjonar eksisterer fortsatt som vart bygd med språket.
CoffeeScript fungerer som syntaktisk sukker over JavaScript, og gjer det mogleg med ein meir konsis og lesbar kodestil. JavaScript støttar ikkje funksjonar som listekomprehensjonar og splat-operatorar nativt, noko som gjer CoffeeScript tiltalande for visse bruksområde.
Sjølv om CoffeeScript passar godt inn i JavaScript-økosystemet, tilbyr Python meir omfattande bibliotek og rammeverk for dataanalyse, vitenskapleg databehandling og webutvikling. CoffeeScript er spesielt betre tilpassa for front-end utvikling.
CoffeeScript og Ruby deler idiomatiske uttrykk, men formålet med CoffeeScript er tett fokusert på interoperabilitet med JavaScript. Ruby er eit meir generelt språk med eit rikt økosystem, men manglar direkte kompilering til nettlesar.
TypeScript tilbyr statisk typekontroll som kan hjelpe med å fange feil ved kompilering. CoffeeScript, derimot, fokuserer utelukkande på å forenkle JavaScript-syntaks utan typehåndheving.
Eit av dei mest nyttige verktøya for kilde-til-kilde oversetting for CoffeeScript inkluderer CoffeeScript-ES6 som kan konvertere CoffeeScript til ES6 JavaScript. I tillegg kan Babel også håndtere JavaScript-transformasjonar, noko som gjer det mogleg for utviklarar å arbeide med moderne JavaScript-funksjonar samtidig som dei støttar eldre versjonar.
Når ein oversett frå CoffeeScript, er det viktig å vurdere korleis ein skal håndtere innrykk på riktig måte, då det er syntaktisk betydningsfullt, og korleis ein effektivt kan omforme funksjonane til CoffeeScript til sine ekvivalentar i andre språk.