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

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

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

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

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

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

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

functional typescript

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

И сделаем мы это, следуя следующим трем пунктам:

  • Используем простые функции вместо простых значений
  • Моделируем изменение данных как конвейер
  • Извлечем обобщенные функции

Итак, начнем-с!…

Оценка ПО: полная чушь

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

На деле - нет. Правильно оценить, сколько займет что-то запрограммировать вряд ли возможно. Я никогда не мог, и каждый раз, когда я вижу кого-то, кто пробует - всегда ошибается.…

Функтор в 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);
}

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

Миф о повторном использовании

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

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

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

Жизненные уроки от бывалого программиста

За три десятилетия программистской деятельности, я усвоил пару-тройку уроков. Ниже несколько самых лакомых.

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

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

Почему я не работаю за неоплачиваемые сверхурочные и вы не должны

Как программист в США на протяжении 30 лет, я потратил некоторое время, работая больше 40 часов в неделю, что довольно распространено в этой индустрии. И редко, если вообще, получал большую оплату.

Хватит, теперь я нахожу эту идею тошнотворной.

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

О чем наиболее сожалею как программист

Немного более 20 лет назад, я стоял перед выбором. Моя вторая компания была истощена, когда наш пятилетний проект DeltaGraph для издателя закончился (они хотели переключится на рождающийся интернет). В то время, я уже имел 13 лет опыта как программист, а также около 9 лет опыта как управляющий компанией (в то же время).

Я больше не хотел занимать обе позиции одновременно. Моя первая компания 85-87 не только создала новый тип электронных таблиц, но и сама ее издавала.…