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

functional typescript

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

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

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

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

Функтор в 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 как продолжения (continuation-passing style aka CPS). Разберемся, как они работают и дадим несколько рекомендаций о их использовании.

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

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

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

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

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

wall-e, мусор

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

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

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

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

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

Recipe Function ErrorTrack

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

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

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

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

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

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

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

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

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

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

Draft!!!

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

Переменные

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

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