На этой недели я прочитал несколько интересных статей по CoffeeScript пока готовил материалы для тренинга. В процессе я обнаружил несколько особенностей о которых раньше не знал.
Вы возможно уже знакомы со стандартным способом обхода массива в CoffeeScript.
Но знали ли вы о том, что можно добавить доболнительный аргумент и получить текущий индекс?
JavaScript (и CoffeeScript) не требует четкого соблудения количества аргументов отправляемых в функции. В этом примере последние нескольео параметров будут просто проигнорированы.
Но вы знали, что CoffeeScript поддерживает и такой вариант?
CoffeeScript также поддерживает comprehensions – немного похожие на рубишный map
Множественное присваивание — возможность присвоить значение нескольким переменным за раз. Например, вы можете использовать его для обмена значениями между двумя переменными в одной строке.
Вы так же можете использовать для передачи параметров в функцию.
Это даже работает для нескольких уровней вложенности!
Динамические параметры вместе с множественым присваиванием дают вам еще один мощный способ для работы с массивами переменной длины.
CoffeeScript позволяет нам использовать цепные сравнения (заимствованные из питона), которые позволяют легко проверять входит ли значение в промежуток.
Вы возможно знаете, что CoffeeScript позволяет вставлять переменны в строки (используя рубишный синтакс).
Но знали ли вы, что JavaScript поддерживает форматированный текст? Отступ, скоторого начинается текст сохраняется, так что вы можете держать его в полном порядке.
Вы вероятно знаете, что @ является сокращением от `this`. Но знали ли вы, что CoffeeScript так же имеет сокращение для доступа к прототипу класса?
CoffeeScript позволяет нам присваивать значения на свойства непосредственно используя "@". К примеру, вы часто хотите назначить параметры в конструкторе.
Но вы можете использовать сокращенный вариант. CoffeeScript это единственный язык, который позволяет делать такие вещи.
С помощью "@" так же можно определить функции класса.
Мое выполнение функции выше ссылается на XKCD.
Happy coding.
Данная статья является переводом этой.
Циклы
Вы возможно уже знакомы со стандартным способом обхода массива в CoffeeScript.
for name in ['Tom','Dick','Harry']
alert "Hi, #{name}"
Но знали ли вы о том, что можно добавить доболнительный аргумент и получить текущий индекс?
for name, i in ['Tom','Dick','Harry']
alert "Hi, #{name} - you are number #{i}"
=> "Hi, Tom - you are number 1" => "Hi, Dick - you are number 2" => "Hi, Harry - you are number 3"
Динамические параметры
JavaScript (и CoffeeScript) не требует четкого соблудения количества аргументов отправляемых в функции. В этом примере последние нескольео параметров будут просто проигнорированы.
planets = (first, second, third) ->
alert third
planets 'Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter'
# alert will be 'Earth'
Но вы знали, что CoffeeScript поддерживает и такой вариант?
planets = (first, second, others...) ->
alert others
planets 'Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter'
# alert will be 'Earth','Mars','Jupiter'
Циклы (Comprehensions)
CoffeeScript также поддерживает comprehensions – немного похожие на рубишный map
class Person
constructor: (name, email) ->
@name = name
@email = email
userEmails =
tom: 'tom@example.com'
dick: 'dick@example.com'
harry: 'harry@example.com'
contacts = for name, email of userEmails
new Person(name,email)
Множественное присваивание
Множественное присваивание — возможность присвоить значение нескольким переменным за раз. Например, вы можете использовать его для обмена значениями между двумя переменными в одной строке.
one = 1
two = 2
[one, two] = [two, one]
Вы так же можете использовать для передачи параметров в функцию.
date = ->
[25,'April',2013]
[day, month, year] = date()
Это даже работает для нескольких уровней вложенности!
person =
name: 'John'
email: 'john@example.com'
address:
street: [
'123 Main Street'
'Apt 8B'
]
city: 'Gotham'
zip: '8442'
{ address: { street: [_, apartment], city } } = person
Динамические параметры вместе с множественым присваиванием
Динамические параметры вместе с множественым присваиванием дают вам еще один мощный способ для работы с массивами переменной длины.
daysOfTheWeek = "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
[first, rest..., last] = daysOfTheWeek.split ','
Сравнеения
CoffeeScript позволяет нам использовать цепные сравнения (заимствованные из питона), которые позволяют легко проверять входит ли значение в промежуток.
temperature = 72
niceDay = 82 > temperature > 68
Строки
Вы возможно знаете, что CoffeeScript позволяет вставлять переменны в строки (используя рубишный синтакс).
name = "John"
surname = "Doe"
greeting = "Hi, #{name} #{surname}"
Но знали ли вы, что JavaScript поддерживает форматированный текст? Отступ, скоторого начинается текст сохраняется, так что вы можете держать его в полном порядке.
html = """
<p>
Hi, #{name} #{surname}
</p>
"""
Прототип класса
Вы вероятно знаете, что @ является сокращением от `this`. Но знали ли вы, что CoffeeScript так же имеет сокращение для доступа к прототипу класса?
String::pipeDelimited = ->
@split '|'
alert "ABC|abc".pipeDelimited()
Привязка параметров к свойствам
CoffeeScript позволяет нам присваивать значения на свойства непосредственно используя "@". К примеру, вы часто хотите назначить параметры в конструкторе.
class Person
constructor: (name) ->
@name = name
Но вы можете использовать сокращенный вариант. CoffeeScript это единственный язык, который позволяет делать такие вещи.
class Person
constructor: (@name) ->
Статическик функции
С помощью "@" так же можно определить функции класса.
class Number
@random: ->
return 4 # chosen by fair dice roll
# guaranteed to be random
alert Number.random()
Мое выполнение функции выше ссылается на XKCD.
Happy coding.
Данная статья является переводом этой.