Всем привет! В этом материале мы поговорим о том, как создавать и использовать функции в языке программирования coffeescript .

Изучаем CoffeeScript. Функции.

Всем привет! В этом материале мы поговорим о том, как создавать и использовать функции в языке программирования coffeescript.

Итак, давайте напишем функцию приветствия сначала на javascript, а потом на coffeescript, чтобы вы сразу увидели разницу.

var greet;
greet = function(name) {
  return 'Hello, ' + name + '!';
};

Та же самая функция в coffeescript будет выглядеть вот так:

greet = (name) -> 'Hello, #{name}!'

Как видите, все значительно проще. Сначала в круглых скобках идут аргументы, затем стрелочка, затем тело функции. Если же вам не нужны аргументы, то вы вообще можете не писать их, и тогда функция будет выглядеть вот так:

greet = -> 'Hello, Sergey!'

В скомпилированном javascript вы можете увидеть, что функция всегда возвращает значение последнего выражения. Т.е. в нашем случае с приветствием она будет выглядеть так:

var greet;
greet = function(name) {
  return 'Hello, ' + name + '!';
};

Хотя мы нигде не писали ключевого слова return в coffeescript! Давайте теперь изменим функцию в coffeescript и посмотрим, что получится в скомпилированном javascript, чтобы это все было нагляднее

greet = (name) ->
  do updateSomething
  do changeSomething
  'Hello, #{name}!'
  do processSomething

В итоге получим следующее:

var greet;
greet = function(name) {
  do updateSomething();
  do changeSomething();
  'Hello, ' + name + '!';
  return processSomething();
};

На самом деле, это ни на что не влияет, вы можете просто игнорировать этот возврат, если он вам не нужен. Однако, если все-таки вам очень нужно убрать его из скомпилированного кода, то просто добавьте пустой return в конце.

greet = (name) ->
  'Hello, #{name}!'
  return

Естественно, вы можете прописывать стандартные значения для аргументов точно так же, как и в javascript

greet = (name = 'Sergey') -> 'Hello, #{name}!'

Теперь поговорим о том, что делать, если наша функция должна принимать неопределенное количество аргументов. В javascript для этого используется объект arguments, в coffeescript же все намного проще.

normalize = (length, vectors...) -> 'something here...'

Как вы можете видеть, все, что нам нужно сделать, это просто добавить три точки, что будет значить, что все следующие аргументы после второго будут записаны в массив vectors.

Теперь об областях видимости: var писать не нужно, внутри функции любая переменная считается локальной в том случае, если переменная с таким именем не была объявлена раньше.

outer = 10
func = ->
  outer = 10
  inner = 10
  return

В результате получим следующее:

var func, outer;
outer = 10;
func = function() {
  var inner;
  outer = 10;
  inner = 10;
};

Вызывать функции можно без круглых скобок. При вложенных вызовах параметры будут оборачиваться справа налево.

show() // show()
do show // show()
show update object // show(update(object))

Теперь рассмотрим анонимные самовызывающиеся функции. Как вы уже знаете, все функции в coffeescript анонимные и все, что вам нужно сделать, чтобы получить анонимную самовызывающуюся функцию, как в языке javascript, это написать впереди ключевое слово do

do -> do something

В результате получим следующее:

(function() {
  return something();
})();

Итак, на этом все! Спасибо за внимание!