🇺🇦 Math.random(): javanoscript community – Telegram
🇺🇦 Math.random(): javanoscript community
1.14K subscribers
363 photos
8 videos
530 links
Download Telegram
Channel name was changed to «Math.random(): javanoscript community»
Это что на javanoscript?

Удивительный проект, написаный на javanoscript - система оптического распознавания символов (OCR). Работает в браузере (!) и в node.js. Распознает 100+ языков!

https://github.com/naptha/tesseract.js
Новая статья от адепта RxJS, нашего постоянного автора и активного участника нашего комьюнити.

О чем статья:
О том как при помощи синтаксиса регулярных выражений реализовать drag-n-drop в RxJS:

/DM*U/.exec(
mouseDown$,
mouseMove$,
mouseUp$
)

https://dev.to/kosich/regexp-for-reactive-streams-143g

#костины_истории
⁠Продолжаем говорить о функциональном программировании и сегодня речь пойдет о следующих терминах: композиция функций, каррирование и авто-каррирование.

Композиция функций (Function Composition) - соединение функций для формирования новой функции, в которой результат первой функции передается в качестве аргумента во вторую функцию. Математически это выглядит так:


F(x) = g(f(y))

В коде так:


const compose = (f, g) => (a) => f(g(a)) // Definition
const floorAndToString = compose((val) => val.toString(), Math.floor) // Usage
floorAndToString(121.212121) // '121'


Каррирование(Curring) - конвертация функции из функции, которая принимает несколько входящих аргументов, в функцию, которая принимает один аргумент за раз.

Каждый раз вызывая функцию с одним аргументом, мы получаем новую функцию, до тех пор пока не получим все аргументы:


const sum = (a, b) => a + b

const curriedSum = (a) => (b) => a + b

curriedSum(40)(2) // 42.

const add2 = curriedSum(2) // (b) => 2 + b

add2(10) // 12

Автоматическое каррирование (Auto Currying) - преобразование функции, принимающей несколько аргументов, в новую функцию. В новой функции, если передавать меньшее количество аргументов, то она вернет новую функцию, которая ожидает оставшиеся аргументы. В популярном фреймворке ramda есть специальная функция curry, реализующая автоматическое каррирование.


const add = (x, y) => x + y

const curriedAdd = _.curry(add)
curriedAdd(1, 2) // 3
curriedAdd(1) // (y) => 1 + y
curriedAdd(1)(2) // 3


Сегодня в ссылке отличный видео курс по функциональному программированию.


#функциональное_программирование
Давайте поговорим сегодня о новых терминах функционального программиста: идемпотентность, предикат и бесточечная нотация.

Идемпотентность (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.
Релизы приводят к неизбежным проблемам не только в праздники и выходные, но и в рабочие дни.
Применение  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/