CoffeeScript ei ole JavaScriptiä

Myönnän yhden seikan tähän alkuun: en ole kirjoittanut CoffeeScriptillä koodia kovinkaan paljoa. Tämä seikka ei kuitenkaan tule viemään tämän jutun pointtia. Olen nyt kirjoitellut JavaScriptiä työn merkeissä parisen vuotta (ja harrastusmielessä kymmenisen vuotta kauemmin). Tänä aikana on tullut havaittua ainakin se, että koodin ylläpidettävyys on tärkeä asia: jos koodin lukeminen on vaivalloista ja hidasta, niin se on toteutettu jollakin tavalla huonosti. Tämä toki sillä oletuksella, että koodin lukija on osaava ohjelmoija.

Lyhyt esittely

CoffeeScript tekee pari asiaa. Ensinnäkin se heivaa koodin rakenteellisuuden pois, eli aaltosulkeet, puolipisteet ja pilkut saavat lentää mäkeen. Samoin läjä usein toistuvia avainsanoja kuten function, return ja var. Perusajatuksena tässä on tehdä koodin kirjoittamisesta nopeaa sillä, että koodi on lyhyttä ja kompaktia.

Toinen mielenkiintoinen seikka CoffeeScriptissä on pyrkimys tehdä koodista luonnollisen kielen kaltaista vähän Rubyn tai Pythonin tapaan. Notaatiosta on heivattu pois esimerkiksi && ja sen sijaan tulisi käyttää andia. Samoin on mahdollista kirjoittaa ehtolausekkeita, jotka kertovat lopputuloksen ensin ja sitten vasta ehdon, jonka pohjalta tämä lopputulos toteutuu. Eli koodin logiikka hypähtää perinteisestä ylhäältä alas, vasemmalta oikealle -tyylistä joillakin riveillä kulkemaankin myös oikealta vasemmalle.

CoffeeScript ottaa myös pois valtaa kehittäjältä siinä, että tietyt konventiot pakotetaan käytettäväksi. Nämä pohjautuvat pitkälti kirjassa JavaScript: The Good  Parts esitettyihin ajatuksiin. Toisin sanoen se minkä CoffeeScript katsoo JavaScriptin ”huonoudeksi” on tietoisesti otettu pois työkalupakista.

Mitä väärää tässä on?

Jos olen ymmärtänyt oikein, niin kehittäjät jotka ovat nähneet vaivan opetella CoffeeScriptin perinpohjaisesti ovat saattaneet alkaa pitää siitä, miten koodin kirjoittaminen on nopeaa ja näppärää. Vähällä vaivalla saa aikaiseksi paljon. Tässä mielessä CoffeeScript lieneekin verrattain onnistunut tapaus.

Mitenkäs sitten kun jonkun toisen tarvitsee lukea koodia? JavaScriptin lukeminen ei ole kovinkaan suuri ongelma monille ohjelmoijille. Ei ainakaan sen jälkeen kun tietyt JavaScriptin omaleimaisuudet ovat tulleet tutuksi. Syntaksi ja rakenne on tuttua muista kielistä.

Tämä on alue, jossa CoffeeScript osoittautuu todella huonoksi. Luonnolliseen kieleen pyrkiminen ja ”turhien” rakenteiden poistaminen vievät pois visuaaliset vihjeet, jotka auttavat koodin nopeassa ymmärtämisessä. Samalla koodin kompaktius pahentaa tilannetta entisestään, koska usein JavaScriptiä kirjoittaessa yksi rivi koodia tekee vain pari asiaa. CoffeeScriptin kohdalla olen törmännyt riveihin, jotka tekevät lähemmäs kymmenen eri asiaa. Tämmöinen logiikan määrä on hidasta omaksua, koska on vain minimaaliset visuaaliset vihjeet auttamassa koodin eri osien jäsentämisessä.

Pahin asia kuitenkin on se, että toisin kuin vaikkapa TypeScript, niin CoffeeScript ei olennaisesti pyri ratkaisemaan mitään todellista ongelmaa tai tuo mitään uutta. Se on vähän kuin yritys lakaista maton alle JavaScriptin ”likaisuus”, puristaa koodi kasaan ja tehdä siitä kivaa kirjoittaa. Tämän lisäksi se ei kuitenkaan tarjoa hirveästi mitään konkreettista uutta. Se on vain erilainen tapa esittää koodi. Vähän kuin keskisormen näyttöä JavaScriptin suuntaan, vaikka tarkoitus on ”olla vain JavaScriptiä”.

Muita huonoja puolia ja havaintoja

  • Se täytyy opetella erikseen; ei vain yhden henkilön, vaan kaikkien tiimin jäsenien.
  • Jos kirjoitat paljon CoffeeScriptillä, kirjoitat helposti huonoa JavaScriptiä (esimerkiksi == vs. ===).
  • CoffeeScript tarvitsee aina ”kääntää” erikseen JavaScriptiksi.
  • CoffeeScript esittelee omat luokkansa, jotka eivät ole yhteensopivia tulevan ECMAScript 6 -standardin kanssa.
  • CoffeeScriptillä on helppoa huomaamatta vaihtaa muuttujan scopea (käyttämällä samaa muuttujan nimeä ylempänä hierarkiassa).
  • Merkittävimmät Node.js -kehittäjät eivät käytä projekteissaan mitään, mikä on kirjoitettu CoffeeScriptillä.

CoffeeScript voi olla hieno juttu omissa pikkuprojekteissa ja leikkikaluna, mutta kunnon ammattikäytössä siitä on lähinnä haittaa. Sillä voi kehittää nopeasti uutta ja se saattaa sen ansiosta soveltua erinomaisesti lyhytikäisiin projekteihin, mutta pysyvissä järjestelmissä se on vain tiellä ja haitaksi.

CoffeeScript ei tule koskaan muotoutumaan yleiseksi tavaksi tehdä asioita: se ei kykene syrjäyttämään JavaScriptiä, eikä se kykene helposti kehittymään eteenpäin säilyttäen taaksepäinyhteensopivuuden jo olemassa olevan koodin kanssa. Kaiken huipuksi ECMASCript 6 tekee CoffeeScriptistä monella tapaa tarpeettoman.

Tämä alkanut vuosi on ES6:n vuosi.

Lisää lukemista englanniksi