31-05-2023
Класс языка: |
объектно-ориентированный, императивный, функциональный, аспектно-ориентированный, прототипный |
---|---|
Появился в: |
2009 |
Автор(ы): |
Jeremy Ashkenas |
Расширение файлов: |
.coffee |
Релиз: |
1.3.3 (15 мая 2012[1]) |
Испытал влияние: | |
Лицензия |
CoffeeScript[2] |
Сайт: |
coffeescript.org |
CoffeeScript (JavaScript Lint.
Содержание |
Изначально компилятор был написан на Ruby, но в версии 0.5, которая вышла 21 февраля 2010, компилятор был реализован на самом же CoffeeScript. CoffeeScript был радушно воспринят в Ruby сообществе. В веб-фреймворке Ruby on Rails версии 3.1, CoffeeScript заменил JavaScript.
CoffeeScript:
age = 2 male = true name = "Матвей"
JavaScript:
var age = 2, male = true, name = "Матвей";
CoffeeScript:
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 (именно аналог, а не результат компиляции):
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 = Baby; 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 # cтатический метод, записан в Test setHi : (msg) -> # динамический метод, записан в Test.prototype @hi = -> msg # динамический метод, записан в экземпляр Test
Так как компилятор CoffeeScript написан на самом CoffeeScript, вы можете опробовать его в онлайн на официальном сайте, при этом, в отличие от Try Ruby, асинхронных запросов происходить не будет, поскольку код компилируется непосредственно в вашем браузере.
Смежные проекты:
CoffeeScript.