Программирование на Javascript

Эта статья о функциональных концепциях JavaScript. Некоторые из них встроенны в языки программирования, другие дополнительно установляются, но все они хорошо распространены в чисто функциональных языках, как Haskell. Первое, на что я хотел бы обратить внимание, это на то, что я подразумеваю под термином чисто функциональный язык. Такие языки «безопасны», они не вызывают побочных эффектов, то есть определение выражения ничего не изменит во внутреннем состоянии и не приведет к другому результату одного и того же выражения после повторного вызова. Это кажется очень странным и бесполезным таким серьёзным парням, как я, но на самом деле в этом есть достаточно много преимуществ:
- Согласованность. Здесь не будет дедлоков или race conditions оттого, что нам не нужна блокировка – данные неизменные. Это уже многообещающе.
- Модульное тестирование. Мы можем писать юнит-тесты и не волноваться о состоянии просто потому, что здесь его нет. Нам нужно беспокоиться только об аргументе функций, которые мы тестируем.
- Устранение дефектов. Простой трассировки стека полностью достаточно.
- Прочная теоретическая база. Функциональные языки базируются на лямбда-исчислении – формальной системе. Этот теоретический фундамент очень просто доказывает правильность написания программ (например, с использованием индукции).
Надеюсь, этих доводов вам достаточно, чтобы перейти к следующим разделам. Сейчас я опишу функциональные элементы в JavaScript и также предоставлю имплементацию аспектов, которые не встроенные изначально, но их реализация не будет затратной для нас.
Анонимные функции
Кажется, функциональное программирование становится все более популярным. Дуже в Java 8 скоро появятся анонимные функции, в C# они есть уже очень давно. Анонимная функция – это функция, которая определяется без идентификатора. В JavaScript эта концепция уже настроена. Если вы использовали JavaScript не только для наипростейших задач, я уверен, что вы тоже знаете о нем. Когда вы используете jQuery, вот что вы точно печатаете сначала:
- $(document).ready(function {
- //do some stuff
- });
Функция, переданная в $(document).ready и есть анонимной функцией. Этот концепт очень выгодный в некоторых случаях, когда мы хотим действовать за принципом DRY (Don't repeat yourself; if you're repeating yourself, you're doing it wrong).
Source: smartme.university