Рабочий стол > DL Руководство пользователя > ... > JavaScript > CoffeeScript > Information > Сравнить страницу
CoffeeScript Войти | Зарегистрироваться   Просмотр версии для печати текущей страницы.

Ключ
Эти линии были удалены. Это слово было удалено.
Эти линии были добавлены. Это слово было добавлено.

Просмотр истории страницы


Есть 9 изменений. Просмотреть первое изменение .

 {{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]). {color:red}Внимание{color}: на некорректном коде компилятор зависает.
  
 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}
 var fact = function (n) {
  if (n < 2)
  return 1;
  else
  return n * fact(n - 1);
 }
 {code}
 
 В языке неоднократно используются однострочные команды и "псевдонимы" для упрощения кода.
 {code:java|title=CoffeeScript}
 launch() if ignition is on
 volume = 10 if band isnt SpinalTap
 letTheWildRumpusBegin() unless answer is no
 if car.speed < limit then accelerate()
 winner = yes if pick in [47, 92, 13]
 print inspect "My name is #{@name}"
 solipsism = true if mind? and not world?
 zip = lottery.drawWinner?().address?.zipcode
 {code}
 {code:java|title=JavaScript}
 if (ignition === true)
  launch();
  
 if (band !== SpinalTap)
  volume = 10;
  
 if (!(answer === false))
  letTheWildRumpusBegin();
  
 if (car.speed < limit)
  accelerate();
  
 if ((pick === 47) || (pick === 92) || (pick === 13))
  winner = true;
  
 print( inspect("My name is " + this.name) );
  
 if ((typeof mind !== "undefined" && mind !== null) && (typeof world === "undefined" || world === null))
  solipsism = true;
  
 var zip; // undefined
 if (typeof lottery.drawWinner === "function") {
  let address = lottery.drawWinner().address;
  if (address != null)
  zip = address;
 }
 {code}
 
 Также язык поддерживает такую штуку, как [comprehensions|https://en.wikipedia.org/wiki/List_comprehension] (термин, не имеющий _полноценного_ перевода на русский язык).
 {code:java|title=CoffeeScript}
 squares = (x**2 for x in list)
 evens = (x for x in list when x % 2 is 0).length
 repr = for key, value of object
  "#{key}: #{value}"
 {code}
 {code:java|title=JavaScript}
 var squares = [];
 for (var i = 0; i < list.length; i++)
  squares.push( Math.pow(list[i], 2) );
  
 var evens = 0;
 for (i = 0; i < list.length; i++)
  if (list[i] % 2 === 0)
  evens++;
  
 var repr = [];
 for (var key in object)
  repr.push(key + ": " + object[key]);
 {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}
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами