«Настоящие» примеси на классах JavaScript

Примеси и JavaScript: Хорошие, плохие и уродливые

Примеси и JavaScript как классическое кино с Клинтом Иствудом.

Они хороши тем, что позволяют создать объект из настолько маленьких кусков, насколько это позволяет гибкая природа JavaScript, поэтому примеси довольно популярны в определенных кругах.

Список плохих качеств немного больше:

  • нет общей идеи за концептом примесей;
  • они требуют для использования дополнительные библиотеки;
  • более усложненное создание (например, координацию между примесями и прототипами) и не вписывается в природу шаблонов проектирования;
  • сложнее проводить статический анализ;
  • и наконец, большая часть библиотек мутирует объекты или их прототипы, что приводит к проблемам с оптимизацией, поэтому некоторые программисты их избегают.

Функтор в JavaScript

Рассмотрим следующий код:

function plus1(value) {  
    return value + 1  
}  

Это простая функция, которая получает числовое значение и добавляет к нему единицу. Аналогичным образом мы можем сделать функцию plus2. Мы будем позже использовать эти функции:

function plus2(value) {  
    return value + 2  
}  

Или мы можем написать обобщенную функцию, чтоб использовать любую из этих функций по необходимости:

function F(value, fn) {  
    return fn(value)  
}
F(1, plus1) ==>> 2

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

Области видимости переменных в JavaScript и их подводные камни

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

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

Асинхронное программирование и стиль продолжений в JavaScript

В этой статье мы рассмотрим асинхронные функции обратного вызова в JavaScript как продолжения (continuation-passing style aka CPS). Разберемся, как они работают и дадим несколько рекомендаций о их использовании.

Асинхронное программирование и функции обратного вызова

Если вы когда-нибудь программировали на JavaScript, то, вероятно, заметили, что все работает по-другому: вместо возвращения значения, оно передается в функцию обратного вызова. Синхронная программа выглядит следующим образом:

function loadAvatarImage(id) {
    var profile = loadProfile(id);
    return loadImage(profile.avatarUrl);
}

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

Трамплин в JavaScript

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

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

Понятие функции в программировании

f (x)

Что такое функция

Программа представляет собой последовательность выражений языка. Нередко случается, что какая-то часть программы (блок кода) неоднократно повторяется. Чтобы устранить подобного рода избыточность программного кода, используют понятие функции. Функция — это именованный блок кода, который вызывается в нужных местах программы по имени. Другими словами, функция представляет собой подпрограмму, которую можно вызвать из основной программы, причем неоднократно. Повторяющийся (да и не только) блок программного кода обычно обозначают некоторым уникальным именем, чтобы потом при необходимости обратиться к нему по этому имени.…

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

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

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

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

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

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

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

wall-e, мусор

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

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

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

Функциональный JavaScript

функциональный javascript

Draft!!!

Осторожно! Слабонервным, холерикам и беременным не читать - выносит мозг, меняет сознание!

Переменные

function func(fn, arg1, arg2) {
    return function () {
        return fn.call(null, arg1, arg2);
    };
}

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

Безопасное использование .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 в конец документа. Я метод немного доработал.…