Главная
Новости
Строительство
Ремонт
Дизайн и интерьер

















Яндекс.Метрика

CoffeeScript

CoffeeScript ([’kɔ:fɪ skrɪpt]; кофи скрипт) — язык программирования, транслируемый в JavaScript. CoffeeScript добавляет синтаксический сахар в духе Ruby, Python, Haskell и Erlang для того, чтобы улучшить читаемость кода и уменьшить его размер. CoffeeScript позволяет писать более компактный код по сравнению с JavaScript. JavaScript-код, получаемый трансляцией из CoffeeScript, полностью проходит проверку JavaScript Lint.

История

Создателем языка является Джереми Ашкенас.

Изначально компилятор был написан на Ruby, но в версии 0.5, которая вышла 21 февраля 2010 года, компилятор был реализован на самом же CoffeeScript.

CoffeeScript был радушно воспринят в Ruby-сообществе. Встроенная поддержка CoffeeScript была добавлена в веб-фреймворк Ruby on Rails с версии 3.1.

Реализация

На официальном сайте языка есть раздел «try coffeescript», позволяющий выполнять программы на нём online. В отличие, к примеру, от Try Ruby, при этом не будет происходить запросов к серверу, код компилируется и исполняется непосредственно в браузере.

Примеры

Переменные

CoffeeScript:

age = 2 male = true name = "Матвей"

JavaScript:

var age = 2, male = true, name = "Матвей";

Функции

CoffeeScript:

say = (speech) -> alert speech say "Привет мир!"

JavaScript с использованием ECMAScript 2015:

const say = speech => alert(speech); say('Привет мир!');

JavaScript:

var say = function(speech) { alert(speech); }; say("Привет мир!");

Классы и объекты

CoffeeScript:

class Human constructor : (@name) -> class Baby extends Human say : (msg) -> alert "#{@name} говорит '#{msg}'" sayHi : -> @say('здравствуй!') matt = new Baby("Матвей") matt.sayHi()

JavaScript с использованием ECMAScript 2015:

class Human { constructor(name) { this.name = name; } } class Baby extends Human { say(msg) { alert(`${this.name} говорит '${msg}'`); } sayHi() { this.say('здравствуй!'); } } const matt = new Baby('Матвей'); matt.sayHi();

Аналог на JavaScript (именно аналог, а не результат компиляции):

function Human(name){ this.name = name; } function Baby(name){ Human.call(this, name); } Baby.prototype = Object.create(Human.prototype); Baby.prototype.say = function(msg){ alert(this.name + ' говорит ' + msg); }; Baby.prototype.sayHi = function(){ this.say('здравствуй!'); }; Baby.prototype.constructor = Human; var matt = new Baby("Матвей"); matt.sayHi();

Примечание: в JavaScript при работе с «классами» (конструктор + прототипы + функции для наследования и смешивания) часто используют обёртки (MooTools, AtomJS и другие). Аналогия на JavaScript с классовой обёрткой AtomJS:

var Human = Class({ initialize : function(name) { this.name = name; } }); var Baby = Class({ Extends : Human, say : function(msg) { alert(this.name + ' говорит ' + msg); }, sayHi : function() { this.say('здравствуй!'); } }); var matt = new Baby("Матвей"); matt.sayHi();

Пример класса CoffeeScript с различными видами свойств.

class Test say = (msg) -> alert msg # приватный метод @echo = (msg) -> console.log msg # статический метод, записан в Test setHi : (msg) -> # динамический метод, записан в Test.prototype @hi = -> msg # динамический метод, записан в экземпляр Test