Немного вольный перевод статьи "10 CoffeeScript Features You Might Not Know" by Jaco Pretorius.
Но знали ли вы, что можно получить индекс текущего элемента, добавив экстра-аргумент?
Но знали ли вы, что CoffeeScript поддерживает групповые аргументы? (Групповые аргументы обозначаются добавление троеточия - прим. переводчика)
Этот приём можно так же использовать для присваивания результата функции нескольким переменным:
И даже так - работает:
Но знали ли вы, что CoffeeScript поддерживает встроенные документы? Это очень полезная штука для текста, где важны пробелы и отступы, т.к. формат текста внутри встроенного документа сохраняется:
Алгоритм генерации случайных чисел взят с XKCD.
На этой неделе я потратил некоторое времени на изучение ресурсов о CoffeeScript, которые могли бы быть использованы для обучения клиента, и успел открыть для себя новые возможности CoffeeScript, о которых я раньше не знал или знал, но забыл.
Итерации
Наверно, вам известен стандартный способ перебора элементов списка.
for name in ['Tom','Dick','Harry']
alert "Hi, #{name}"
Но знали ли вы, что можно получить индекс текущего элемента, добавив экстра-аргумент?
for name, i in ['Tom','Dick','Harry']
alert "Hi, #{name} - you are number #{i}"
Групповые аргументы (splatting)
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'
Генераторы (сomprehensions)
Coffeescript также поддерживает генераторы - похоже на map в Ruby.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 ','
# прим. переводчика:
# first = "Monday"
# rest = ["
Tuesday","Wednesday","Thursday","Friday","Saturday
"]
# last = "Sunday"
Цепочки сравнений
Coffeescript так же поддерживает цепочки сравнений (позаимствовано из Python), что позволяет легко проверить, находится ли значение в заданном диапазоне:temperature = 72
niceDay = 82 > temperature > 68
Встроенные документы (Block strings)
Вы, наверное, знаете, что Coffeescript поддерживает интерполяцию строк (синтаксис такой же, как в Ruby).name = "John"
surname = "Doe"
greeting = "Hi, #{name} #{surname}"
Но знали ли вы, что CoffeeScript поддерживает встроенные документы? Это очень полезная штука для текста, где важны пробелы и отступы, т.к. формат текста внутри встроенного документа сохраняется:
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.
1 коммент.:
А разве это не известные вещи?) Они достаточно хорошо описаны на главной странице coffeescript
Отправить комментарий