После выхода из Ruby идея определения метода вне синтаксиса defend кажется немного пугающей. Тем более, что Ruby предоставил много синтаксического сахара, мы почти просто писали английский язык всякий раз, когда мы кодировали.

В этом посте я расскажу, какие основные различия я заметил при работе с двумя языками.

Рубиновый метод:

def say_hello(name)
    "Hello #{name}!"
end

say_hello("Ray") #=> "Hello Ray!"

Видите, как это просто? Он показывает, где он начинается с ключевого слова def и заканчивается хорошо… ключевым словом end. Однако адаптация к синтаксису функций JavaScript - это совершенно новая игра.

Функция JavaScript:

function sayHello(name) {
   return `Hello ${name}!"
}

sayHello("Jesse") //=> "Hello Jesse!"

В этом примере все не так уж плохо. Давайте просто посмотрим на несколько сложных кодов, которые я написал на обоих языках.

Рубин:

Он чистый и читаемый, не правда ли? По сравнению с…

JavaScript:

Да, уже не так красиво, правда? Что такое все эти let штуки? а что там с фигурными скобками? ({})? Куда делось мое ключевое слово конец?

Вот несколько отличий, которые я заметил между двумя синтаксисами:

Рубин:

  • Сигнатуры методов с несколькими словами имеют snake_cased
  • Вы можете напрямую присвоить переменной значение
  • Неявно возвращает последнюю строку внутри метода
  • Для интерполяции Spring требуются двойные кавычки («») и символ octothorp с фигурными скобками (# {}).
  • Комментирование чего-либо делается с помощью octothorp (#)

JavaScript (традиционная функция):

  • Сигнатуры функций с несколькими словами имеют верблюжий регистр
  • При назначении переменных значению вам необходимо назначить его с помощью ключевого слова let или const. (Вы также можете использовать var, но это не особо поощряется)
  • Должен явно возвращать желаемое значение функции
  • Для интерполяции Spring требуются обратные галочки (``) и знак доллара в фигурных скобках ($ {})
  • Комментирование чего-либо осуществляется двумя косыми чертами (//)

А еще есть синтаксис функции ES6 или ECMAScript 6. Также известны как функции стрелки или жирной стрелки.

Синтаксис функции ES6

const arrowFunction = name => `Hello ${name}!`

arrowFunction("Andy") //=> "Hello Andy!"

Вот как это выглядит в сложном коде:

Вот что я заметил при использовании этого синтаксиса ES6.

JavaScript (функция ES6):

  • Больше не нужно писать ключевое слово функция
  • Больше не нужно явно возвращать значение
  • Выглядит чище… можно сказать личные предпочтения. Вы можете написать простую функцию в одну строчку :)

Единственный случай, когда вам действительно нужно явно возвращать желаемое значение, - это когда у вас есть блок ({}) внутри вашей функции.

const arrowFuncBlock = name => {
    return `Hello ${name}!`
}
arrowFuncBlock("Alex") //=> "Hello Alex!"

Обратной стороной синтаксиса функций ES6 является то, что их нельзя использовать в качестве конструкторов. Это означает, что ключевые слова this, arguments, super или new.target не будут работать соответствующим образом, если функция объявлена ​​с этим компактным синтаксисом.

Чтобы узнать больше о различных синтаксисах, приведенные ниже ресурсы являются отличным инструментом.

Ресурсы:

ECMAScript 6 - ECMAScript 2015

Методы синтаксического сахара в Ruby

Выражения стрелочной функции