Давайте поговорим сегодня о новых терминах функционального программиста: идемпотентность, предикат и бесточечная нотация.
Идемпотентность (idempotent) - функция идемпотента если ее повторное использование не меняет результат.
Предикат (predicate) - функция, которая возвращает булево значение в зависимости от передаваемого значения, в качестве примера можно привести callback функции в filter.
Бесточечная нотация (Point-Free Style) - стиль написания функций, при котором не явно указывается количество используемых аргументов. Такая нотация часто используется для каррирования или для других функций высшего порядка.
Функция
Определения с бесточечной нотацией выглядят как обычные присваивания без
#функциональное_программирование
Идемпотентность (idempotent) - функция идемпотента если ее повторное использование не меняет результат.
f(f(x)) ≍ f(x)
Math.abs(Math.abs(10))
sort(sort(sort([2, 1])))
Предикат (predicate) - функция, которая возвращает булево значение в зависимости от передаваемого значения, в качестве примера можно привести callback функции в filter.
const predicate = (a) => a > 2
;[1, 2, 3, 4].filter(predicate) // [3, 4]
Бесточечная нотация (Point-Free Style) - стиль написания функций, при котором не явно указывается количество используемых аргументов. Такая нотация часто используется для каррирования или для других функций высшего порядка.
// Given
const map = (fn) => (list) => list.map(fn)
const add = (a) => (b) => a + b
// Then
// Not points-free - `numbers` is an explicit argument
const incrementAll = (numbers) => map(add(1))(numbers)
// Points-free - The list is an implicit argument
const incrementAll2 = map(add(1))
Функция
incrementAll определяет и использует параметр numbers, так что она не использует бесточечную нотацию. incrementAll2 просто комбинирует функции и значения, не упоминая аргументов. Она использует бесточечную нотацию.Определения с бесточечной нотацией выглядят как обычные присваивания без
function или =>.#функциональное_программирование
Совет профессионала:
Избегайте релизить ваше ПО. Просто оставьте все на localhost.
Релизы приводят к неизбежным проблемам не только в праздники и выходные, но и в рабочие дни.
Избегайте релизить ваше ПО. Просто оставьте все на localhost.
Релизы приводят к неизбежным проблемам не только в праздники и выходные, но и в рабочие дни.
Очередной проект написанный на javascript, который может быть полезен в повседневной жизни.
Wiki для команды - легко с Outline.
https://github.com/outline/outline
Wiki для команды - легко с Outline.
https://github.com/outline/outline
GitHub
GitHub - outline/outline: The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and…
The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible. - outline/outline
Применение Saga паттерна для работы с побочными эффектами - https://redux-saga.js.org
Уверенно выходим из режима #післясвят и напоминаем, что на 22 января уже запланирована первая в этом году встреча. Ожидаем в гости Martin Chaov, Software Architect SBTech и Александра Поштарука, Senior Front-end developer ITecGurus 😱 Тема первой встречи очень релевантна построению плана по личному росту на год — Growing Seniority 😉 http://mathrandom.com/growing_seniority.
Как резали ли бы ножницы ✂️ из иконок, если бы они были реальными - https://wh0.github.io/2020/01/02/scissors.html
Отличный инструмент для рисования диаграмм в стиле "от руки". Открытый код и удобный online сервис в комплекте.
https://www.excalidraw.com/
https://www.excalidraw.com/
Альтернативная moment.js библиотека для работы с датами, размер библиотеки 2kB. API повторят API moment.js.
Учебные материалы для изучения контейниризации с Docker.
Очередной проект, написанный на JavaScript. jExcel это vanilla javascript плагин, который строит таблицы в браузере, может отображать данные из массива объектов, JSON, CVS и XSLX файлов.
https://bossanova.uk/jexcel
https://bossanova.uk/jexcel
Продолжаем серию постов о функциональном программировании, сегодня поговорим о морфизмах: эндоморфизм и изоморфизм. Любой морфизм (Morphism) это преобразующая функция. Рассмотрим по порядку, какие преобразующие функции бывают:
Эндоморфизм (Endomorphism) - преобразующая функция, в которой тип входящего параметра такой-же как и результат выполнения функции:
Изоморфизм (Isomorphism) - парное преобразование между двумя типами объектов, которые являются структурными и данные в преобразованиях не теряются.
Пример, данные о координатах точки в декартовой системе координат можно хранить в виде массива [0, 1] или объекта {x:0, y:1}:
//
Эндоморфизм (Endomorphism) - преобразующая функция, в которой тип входящего параметра такой-же как и результат выполнения функции:
// uppercase :: String -> String
const uppercase = (str) => str.toUpperCase()
// decrement :: Number -> Number
const decrement = (x) => x - 1
Изоморфизм (Isomorphism) - парное преобразование между двумя типами объектов, которые являются структурными и данные в преобразованиях не теряются.
Пример, данные о координатах точки в декартовой системе координат можно хранить в виде массива [0, 1] или объекта {x:0, y:1}:
//
Providing functions to convert in both directions makes them isomorphic.годня в ссылке проект, который позволяет делать преобразования данных по схеме. Может понадобиться при разработке для быстрого извлечения и представления данных.
const pairToCoords = (pair) => ({x: pair[0], y: pair[1]})
const coordsToPair = (coords) => [coords.x, coords.y]
coordsToPair(pairToCoords([1, 2])) // [1, 2]
pairToCoords(coordsToPair({x: 1, y: 2})) // {x: 1, y: 2}
Се