Autor wpisu: singles, dodany: 14.05.2011 23:52, tagi: javascript
O języku JavaScript można mówić dobrze jak i źle, ale na pewno nie można odmówić mu rozkwitu w ostatnich latach. I nie mam na myśli tego, że webmasterzy ponownie zaczęli implementować zegarki latające za kursorem (ah te początki 2000 roku ;) JavaScript na serwerze staje się coraz bardziej naturalny za sprawą narzędzi typu node.js, silniki JS są coraz szybsze, powstaje coraz więcej aplikacji pisanych tylko i wyłącznie w tym języku.
Jednak im więcej kodu piszemy, tym częściej zauważamy, że niektóre konstrukcje językowe powtarzają się coraz częściej. Wydaje mi się, że głównie chęć zaoszczędzenia czasu jest motorem do powstania takich narzędzi jak CoffeeScript, które to chciałbym w tym wpisie krótko przedstawić.
„Ale o so chodzi?”
Jak piszą autorzy, CoffeeScript jest małym językiem, który kompiluje się do JavaScript’u. Przykładowy kod wygląda tak (zaczerpnięty z głównej strony projektu):
# Assignment: number = 42 opposite = true # Conditions: number = -42 if opposite # Functions: square = (x) -> x * x # 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?
Najpierw piszemy kod za pomocą składni CoffeeScript, a następnie kompilujemy do najzwyklejszego JavaScriptu, który to automatycznie przechodzi testy JavaScript Lint. Możliwości narzędzia najlepiej będzie przedstawić na kilku przykładach:
Instrukcje warunkowe
Programistom Ruby poniższa składania powinna wydawać się jak najbardziej naturalna. Mianowicie kod:
number = 42 opposite = true number = -42 if opposite
da nam wynikowo:
var number, opposite; number = 42; opposite = true; if (opposite) { number = -42; }
Szybka definicja funkcji
square = (x) -> x * x cube = (x) -> square(x) * x
zamienia się w:
var cube, square; square = function(x) { return x * x; }; cube = function(x) { return square(x) * x; };
Funkcje z nieokreśloną liczbą parametrów
Czasami zdarza się tak, że funkcja przyjmuje jeden parametr, a następne mogą być dowolne. Tutaj CoffeeScript wprowadza coś, co nazwane jest splats i prezentuje się tak:
gold = silver = rest = "unknown" awardMedals = (first, second, others...) -> gold = first silver = second rest = others
Wynikowo dostaniemy jednak:
var awardMedals, contenders, gold, rest, silver; var __slice = Array.prototype.slice; gold = silver = rest = "unknown"; awardMedals = function() { var first, others, second; first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? __slice.call(arguments, 2) : []; gold = first; silver = second; return rest = others; };
Zauważcie takie rzeczy jak automatyczne pobranie metody slice
z prototypu Array
czy też zainicjowanie zmiennej others
pustą tablicą, kiedy nie zdefiniowano parametrów dodatkowych.