| | {{CoffeeScript}} - язык скриптования Web-страниц, интерпретируемый либо транслируемый в [JavaScript]. Предоставляет менее C-подобный синтаксис с меньшим количеством противоречий. (Однако транслируется он "напрямую", и потому изменения затрагивают только элементы синтаксиса.) Основные примеры синтаксиса можно найти на [сайте CoffeeScript|http://coffeescript.org]. |
| | {{CoffeeScript}} \- язык скриптования Web-страниц, интерпретируемый либо транслируемый в [JavaScript]. Предоставляет менее C-подобный синтаксис с меньшим количеством противоречий. (Однако транслируется он "напрямую", и потому изменения затрагивают только элементы синтаксиса.) Основные примеры синтаксиса можно найти на [сайте CoffeeScript|http://coffeescript.org]. |
| |
| На DL CoffeeScript компилируется в JavaScript (с использованием [компилятора версии 1.10.0|http://dl.gsu.by/images/agulenko/js/scripts/coffee-script.js] и самописного [враппера|http://dl.gsu.by/images/agulenko/js/scripts/coffee.js]), после чего запускается под PhantomJS 1.9.8 (см. [JavaScript]). |
| |
| h2. Особенности |
| | |
| Скобки вокруг списка параметров вызываемой функции необязательны (исключение: пустой список параметров; рекомендуемое использование: только при одном параметре). Последовательные вызовы вкладываются: |
| {code:java|title=CoffeeScript} |
| f a, b, c d, e |
| {code} |
| {code:java|title=JavaScript} |
| f(a, b, c(d, e)); |
| {code} |
| | Все сравнения ({{==}}, {{!=}}) проводятся без приведения типа (по значению); однако, рекомендуется использовать эквивалентные слова-операторы ({{is}}, {{isnt}}) во избежание путаницы. |
| |
| | Все сравнения (==, !=) проводятся без приведения типа (по значению); однако, рекомендуется использовать эквивалентные слова-операторы ({{is}}, {{isnt}}) во избежание путаницы. |
| |
| Язык поддерживает деструктуризацию объектов и массивов: |
| {code:java|title=CoffeeScript} |
| f = ({a, b}) -> [a, b] |
| o = { |
| a: 5 |
| b: 6 |
| } |
| [x, y] = f o |
| {code} |
| {code:java|title=JavaScript} |
| var |
| f = function (o) { return [o.a, o.b] }, |
| o = { |
| a: 5, |
| b: 6, |
| }, |
| xy = f(o), |
| x = xy[0], y = xy[1]; |
| {code} |
| | |
| Каждая (по возможности) операция является выражением: |
| {code:java|title=CoffeeScript} |
| fact = (n) -> |
| if n < 2 |
| 1 |
| else |
| n * fact n-1 |
| {code} |
| {code:java|title=JavaScript} |
| fact = function (n) { |
| if (n < 2) { |
| return 1; |
| } else { |
| return n * fact(n - 1); |
| } |
| } |
| {code} |
| |
| h2. Примеры |
| | |
| {code:java|title=a+b} |
| sys = require 'system' |
| |
| readAll = (fin) -> |
| [a, b] = fin.readLine().split ' ' |
| return { |
| a: parseInt(a) |
| b: parseInt(b) |
| } |
| |
| printAll = (fout, res) -> fout.writeLine res |
| calc = ({a, b}) -> a + b |
| |
| printAll(sys.stdout, calc readAll sys.stdin) |
| phantom.exit() |
| {code} |
| или |
| {code:java|title=a+b (сокращённо)} |
| sys = require 'system' |
| |
| [a, b] = sys.stdin.readLine().split ' ' |
| console.log parseInt(a) + parseInt(b) |
| phantom.exit() |
| {code} |