Warte uwagi: CoffeeScript

Javascript szturmem zdobywa popularność jako język ogólnego rażenia. Nie jest to już język do wstawiania zabawnych skryptów na stronie. Coraz częściej jest on używany również po stronie back-endu.

Rosnąca popularność nie zmienia jednej rzeczy, mianowicie tego, że:

Javascript jest brzydki jak noc!

Rozwiązaniem tego problemu jest CoffeeScript. Jest to prosty język, który kompiluje się do poprawnego JavaScriptu, a składnią przypomina Rubiego lub Pythona. Poniżej próbka:

# Assignment:
number   = 42
opposite = true

# Conditions:
number = -42 if opposite

# Functions:
square = (x) -> x * x

# Arrays:
list = [1, 2, 3, 4, 5]

# Objects:
math =
  root:   Math.sqrt
  square: square
  cube:   (x) -> x * square x

# Splats:
race = (winner, runners...) ->
  print winner, runners

# Existence:
alert "I knew it!" if elvis?

# Array comprehensions:
cubes = (math.cube num for num in list)

Prawda, że wygląda nieźle? Jeśli wam się to podoba, to polecam zajrzeć na oficjalną stronę lub do prezentacji, którą wygłosiłem na ostatnim wrugu.

Dla tych którym nie chcę się instalować Kawoskryptu poprzez Node Package Managera (co jest sugerowanym sposobem instalacji) polecam Railsy 3.1 – tam CoffeeScript jest na dzień dobry.



Komentarze

  1. Seban 16.05.2011

    Comment Arrow

    Jeśli ktoś woli ruchome obrazki od czytania: na Peepcode pojawił się screencast o CoffeeScript http://peepcode.com/products/coffeescript

    @tjeden masz to juz w jakims produkcyjnym projekcie? Czy były jakieś problemy z tym?


  2. tjeden 16.05.2011

    Comment Arrow

    Na razie tylko się bawię, ale nie widzę przeciwwskazań, by użyć tego na produkcji. Wynikowy Javascript wygląda bardzo porządnie.


  3. TheSingularity.pl 16.05.2011

    Comment Arrow

    CoffeeScript jest zajebisty (BTW założyłem o nim stronę w polskiej Wikipedii jakiś czas temu – prośba o korektę).

    Niemniej, uważam że istnieje szereg przeciwwskazań do stosowania go w produkcyjnym kodzie.

    – Debugowanie JavaScriptu staje się _jeszcze_ trudniejsze, bo trzeba ręcznie nawigować między kodem JS i CS.

    – Praktycznie brak wsparcia w IDE. Nie chodzi tylko o podświetlanie kodu. Chodzi przede wszystkim o statyczną analizę, warningi, podpowiedzi.

    – CoffeeScript nakłada znacznie większe wymagania na umiejętności programisty. W praktyce oprócz CoffeScript musi przede wszystkim znać JavaScript na dużo wyższym poziomie, żeby rozumieć proces kompilacji.

    – Jest to ryzykowna zależność w poważniejszych projektach obliczonych na lata.

    Przeciwwskazania NIE oznaczają, że nie należy używać CS na produkcji. Chciałem tylko podkreślić, że jak jest tutaj poważny tradeoff do rozważenia.


  4. uolot 18.05.2011

    Comment Arrow

    Co do IDE – wrzucam to samo, co pisałem wczoraj u @singlesa (http://blog.rbenkel.me/2011/05/coffeescript-javascriptowa-rewolucja/):

    Tak się składa, że w najnowszej becie Komodo IDE 7 (10 maja) dodali obsługę CoffeeScriptu 🙂

    Speaking of new languages, we’ve added support for CoffeeScript, the JavaScript preprocessor. Currently it does coloring, and supports the same kind of indentation-level-based folding that Python does. If Komodo finds a program called „coffee” on the PATH, it will do syntax-checking as well. If you’re using a snazzy new template language that preprocesses CoffeeScript elements and converts them to regular JavaScript script elements for the browser, Komodo will now syntax-check that as well.

    Src: http://goo.gl/ZMZgu


  5. Jakub Godawa 20.05.2011

    Comment Arrow

    Javascript jest brzydki jak noc dla tych, którzy zamiast włączyć światło wolą siedzieć ciągle w tym samym prześwietlonym pokoju. Polecam się uczyć innych języków. Niektórzy w środowisku Ruby najchętniej zrezygnowaliby z SQL, Javascript i Prologa bo nie wyglądają tak jak Ruby. A potem tylko zbierać kwiatki arcypowolnego kodu.

    Noc jest brzydka bo nic w niej nie widać 🙂 świat programowania jest znacznie rozleglejszy i piękniejszy, niż pachnąca fiołkami łączka Ruby.

    CoffeeScript jest przydatny, ale czy rzeczywiście można wyrazić w nim wszystko co można samemu napisać w Javascripcie?


  6. tjeden 23.05.2011

    Comment Arrow

    http://railscasts.com/episodes/267-coffeescript-basics Bardzo ładny railscast na temat.


  7. tjeden 23.05.2011

    Comment Arrow

    @Jakub

    I nie zna życia, kto nie programował w Assemblerze.

    Jeśli zależy Ci na szybkim stworzeniu prototypu to nie ma się co bawić w optymalizowanie SQL’a. Inaczej oczywiście sprawa wygląda, gdy utrzymujesz duży i obciążony serwis. W pewnym momencie bardziej opłaca się optymalizować kod niż dostawić nowy serwer. Tylko, że mnóstwo aplikacji nigdy do tego poziomu nie dochodzi.

    A patrząc na kod wynikowy CS, nie sądzę by tworzył on znaczący narzut.


  8. hipertracker 24.05.2011

    Comment Arrow

    RubyMine też ma wsparcie CofeeScript. Trzeba doinstalować plugin CofeeBrew (https://github.com/netzpirat/coffee-brew) Tu opis z forum RubyMine jak to zrobić: http://devnet.jetbrains.net/message/5303849#5303849


  9. wra 7.07.2011

    Comment Arrow

    Czy są jakieś argumenty przemawiające za używaniem CS oprócz „Javascript jest brzydki jak noc!”? Może kolega ma odpychające kolory w kolorowaniu składni JavaScriptu w swoim IDE:) U mnie kod JS wygląda oszałamiająco.

    Jeżeli mam ułatwić sobie pisanie kodu JS to stosuje frameworki. Oczywiste są dla mnie korzyści ze stosowania hamla do generowania htmla albo scssa do css, ale nie pojmuję dlaczego ktokolwiek znający JS czy piszący w JS chciałby używać Coffeescripta.


  10. tjeden 7.07.2011

    Comment Arrow

    @wra

    Z tego samego powodu, z którego używam hamla, zamiast erb: jest prostszy, bardziej czytelny i muszę mniej się napisać (zaczynając na głupich nawiasach i średnikach, a kończąc na -> zamiast definicji funkcji).


  11. akemrir 29.07.2011

    Comment Arrow

    Do VIMa też jest podświetlenie składni dla coffe-script 😉




Trackbacks


O autorze

Aleksander Dąbrowski

Od 2008 zawodowo programuje w Ruby i Railsach. Jest maniakiem prostych i eleganckich rozwiązań, nie boi się usuwania brzydkiego kodu. Uwielbia dzielić się wiedzą, a w wolnych chwilach naprawia samochody.