Трамплин в JavaScript

Трамплин - функция которая итеративно вызывает возвращенную функцию преобразователь (стиль продолжений). Одного трамплина достаточно чтоб выразить все управление программой, программа тем самым становиться трамплинной или выраженная в трамплинном стиле. Конвертирование программы в трамплинный стиль называется "трамплинирование". Трамплинные функции могут быть использованы программистами для реализации хвостовой оптимизации в стековых языках - Wikipedia

Это описание довольно точное и подходит справочнику, но практически невозможно понять или изучить трамплины без знания о преобразователях, продолжениях и хвостовой оптимизации.…

Анти-паттерны в NodeJS

Синхронное выполнение

Избегаем всех синхронных операций, так же известных как блокирующий ввод/вывод. NodeJS построен на неблокирующим вводе/выводе и любой одиночный блокирующий вызов незамедлительно привносит узкое место.

  • fs.renameSync
  • fs.truncateSync
  • fs.statSync
  • path.existsSync
  • ...

Всех операций блокирующих ввод/вывод необходимо избегать.

Хотя они существуют не спроста. Они могут и должны только использоваться на этапе инициализации вашего сервера. Очень полезно использовать синхронные операции на протяжении инициализации, таким образом вы будете иметь контроль над порядком выполнения, и вам не нужно переживать о функциях обратного вызова которые могли быть, или нет, выполнены к моменту приема первого входящего запроса.…

Функциональное программирование на JavaScript === Мусор

wall-e, мусор

Функциональное программирование превосходно. Оно позволяет легко упрощать программы, также легко их тестировать. К сожалению, не все языки одинаковы. Я немного писал на Clojure и действительно наслаждался им. Поэтому попробовал перенести полученный опыт на JavaScript, и столкнулся с несколькими проблемами о которых собственно и поговорим.

Предпочтение персистентных данных

Основой целью для любой функциональной системы является избегание изменяемого глобального состояния. Другими словами, тех переменных, которые, любой кусок кода может изменить в любое время.…

Руководство по именованию переменных

Польза от именования

Программное обеспечение должно быть написано для понимая людьми, поэтому имена переменных должны быть соответствующие. Люди которые разбирают/читают ваш код, для расширения или исправления, должны понять его. Очень часто, имена переменных используют много места и усложняют понимание. Даже инженеры действующие с хороших побуждений, очень часто выбирают имена которые в лучшем случае только очень поверхностно полезны.

Назначение этого документа, помочь инженерам выбрать хорошие имена переменных.…

Железнодорожно-ориентированное программирование

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

Recipe Function ErrorTrack

В этом посте, мы рассмотрим разные пути соединения шагов-функций в один блок. Внутреннее строение этих функций будет рассмотрено в будущих постах.

Проектирование функций представляющих собой шаг

Давайте более детально рассмотрим эти шаги. Например, функцию валидации. Как она должна работать? Некоторые данные поступают в нее, но что должно быть на выходе?…

Как полностью разработать и написать программу

"Я думаю что? понимаю функциональное программирование на микро уровне и написал несколько игрушечных программ. Но как мне написать завершенную программу, с реальными данными, реальной обработкой ошибок, и тд?"

Это на самом деле довольно распространенный вопрос, поэтому в этой серии постов описать несколько способов, как это делать, включая проектирование, валидацию, обработку ошибок, управление зависимостями, организацией кода, итд.?"

Сначала несколько комментариев и предупреждений:

  • Я буду фокусироваться на одном варианте использования, нежели на целом приложении.

Моноид без слез

Если вы пришли с мира ООП, то одной наиболее сложной вещью в функциональном программировании для вас может быть отсутствие явных шаблонов программирования. Здесь множество идиом типа частичного применения и техник обработки ошибок, но нет очевидных шаблонов как в "Банде четырёх".…

Цена, о которой забывают менеджеры и инженеры

Я буду много говорить о цене. Я верю, что инженерия это поиск наиболее эффективных ценовых решений, и не имеет значение чем цена измеряется: долларами, часами, боевым духом или потерянными возможностями. Некоторые цены платятся сразу, некоторые идут в долг. В бизнесе это все интуитивно понимают. Но некоторые цены менее очевидны нежели другие. Поэтому очень важно донести их до команды.

Среди наиболее опасных недооцененных цен — цена сложности.…

Разработка через гамак

Ричард Хикки (создатель языка программирования Clojure) провел очень интересный доклад о решении задач под названием «Разработка через гамак». Ричард говорил больше с личной (эмпирической) точки зрения. Это пока не очень признано академично, но вписывается в некоторые исследования в области мозга. Поэтому доклад не особо научный, но в то же время дает достаточно хорошую пищу для размышлений.

[youtube video=»f84n5oFoZBc»]

Выводы:

  • Не бросайтесь сразу программировать.

Безопасное использование .ready() перед подключением jQuery

document ready

Сегодня прочитал [Перестаньте платить дань jQuery](http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax), хорошую статью от [Sam Saffron](http://samsaffron.com/), которая поясняет идею перемещения всех внешних скриптов в конец HTML документа, и метода который позволит использовать jQuery `.ready()` везде в вашем документе, даже если вы переместили сам jQuery в конец документа. Я метод немного доработал.…