@frp_ru

Страница 71 из 420
Дмитрий
05.06.2017
08:07:05
o(f, g, x) = f(g(x))

andretshurotshka?❄️кде
05.06.2017
08:07:23
a compose?

Дмитрий
05.06.2017
08:07:43
Часто приходилось самому такое писать. И вроде бы, так ещё работает pipe в sanctuary

a compose?
В compose x не сможет быть объектом)

Google
andretshurotshka?❄️кде
05.06.2017
08:08:16
compose(f, g)(x)

Дмитрий
05.06.2017
08:08:56
Ну вот чтобы можно было без этого)

Название кстати абсолютно от балды выбрали, лол)

? animufag ?
05.06.2017
08:11:20
ну f • g обычно так любой оператор изображают и в контексте функций – их композицию

наверное о будет смысл пользоваться исключительно из-за того что короче на 6 букв

Дмитрий
05.06.2017
08:13:19
Просто это очень частый кейс — именно две функции и применение сразу после объявления

У меня наверное не меньше трети pipe/compose именно такие

andretshurotshka?❄️кде
05.06.2017
08:16:23
а как же длинные пайпы(

Дмитрий
05.06.2017
08:16:38
Ну старые функции никто и не убирал))

? animufag ?
05.06.2017
08:16:49
ещё плюс это карирование на первом аргументе

Дмитрий
05.06.2017
08:16:57
А, да

Kirill
05.06.2017
08:22:07
А вот такая есть в рамде/лодаше? const f = x => () => x

Это как identity, только чтобы функцию возвращала.

Google
andretshurotshka?❄️кде
05.06.2017
08:23:34
always

Kirill
05.06.2017
08:24:14
Спасибо.

Странно, что для lodash/fp нет пакета @types/lodash/fp.

Дмитрий
05.06.2017
09:16:01
lodash/fp просто не нужен

Kirill
05.06.2017
09:19:09
А есть читшиты по наиболее используемым вещам в ramda/lodash-fp?

Vladimir
05.06.2017
09:19:33
есть

открой вики рамды

Kirill
05.06.2017
09:35:14
Блин, не могу найти в lodash/fp аналог R.either. (

Походу, весомая причина перекатиться на рамду.

А как с помощью R.either проверить не 2 предиката, а 3?

Vladimir
05.06.2017
12:49:02
никак?

? animufag ?
05.06.2017
12:49:14
вкладывать either в either

Дмитрий
05.06.2017
12:58:04
А как с помощью R.either проверить не 2 предиката, а 3?
either — это для двух функций, если нужно больше — юзай anyPass

вкладывать either в either
Лишний раз усложнять тоже не стоит)

? animufag ?
05.06.2017
13:04:59
можно reduce(either) для бОльшего количества аругментов

к сожелению не могу найти reduce1

? animufag ?
05.06.2017
13:14:01
ну я так понял ему нравится either. решающий фактор при выборе либы

Kirill
05.06.2017
13:18:27
Почему 2 функция не возвращает значение? const f1 = R.pipe(R.prop('value'), R.sum); const f2 = R.pipe(R.prop('value'), R.always); f1({ value: [1,2,3] }) // 6 f2({ value: [1,2,3] }) // function ???

Google
Дмитрий
05.06.2017
13:22:02
У рамды есть репл, гораздо быстрее посмотреть на результат выражения в нем)

Kirill
05.06.2017
13:22:21
http://ramdajs.com/repl/?v=0.24.1#?const%20f1%20%3D%20R.pipe%28R.prop%28%27value%27%29%2C%20%20R.sum%29%3B%0Aconst%20f2%20%3D%20R.pipe%28R.prop%28%27value%27%29%2C%20%20R.always%29%3B%0A%0Af1%28%7B%20value%3A%20%5B1%2C2%2C3%5D%20%7D%29%20%2F%2F%206%0Af2%28%7B%20value%3A%20%5B1%2C2%2C3%5D%20%7D%29%20%2F%2F%20function%20%3F%3F%3F

Дмитрий
05.06.2017
13:23:02
const f2 = R.pipe(R.prop('value'), R.identity);

Но это что-то немного бессмысленное выражение)

Равносильно prop('value')

А always существует именно для того, чтобы создавать функцию, всегда возвращающую переданное значение

Kirill
05.06.2017
13:26:07
Да, точняк, немного запутался с непривычки. Спасибо.

А можете показать свой боевой код на Рамде? Хочется увидеть реальные и полезные кейсы.

code4aman
05.06.2017
16:01:07


Сергей
05.06.2017
16:01:45
а чего имена файлов в camelCase, а не в классическом для жс kebab-case?

да ну, вложенные тернарки, не стоит как пример брать)

code4aman
05.06.2017
16:03:22
но тут наверное как рефакторинг рамда вводился, где совсем было ужасно

code4aman
05.06.2017
16:04:04
т.к. на деле удобней все из рамды брать (Object.entries и т.д. смотрятся разношерстно)

а чего имена файлов в camelCase, а не в классическом для жс kebab-case?
мм, тут часть проекта на дотнете, первый проект реальный на ноде по сути ?

Kirill
05.06.2017
16:05:41
А почему сам getAttributes не через pipe сделан? Или делать всё через композицию не очень?

code4aman
05.06.2017
16:09:52
думаю можно было бы, тут и логические функции хорошо зашли бы вместо тех же ветвлений тернарок

вообще compose/pipe хорошо форсит SRP и декомпозицию (даже в том же шарпе чаще статичные классы и функции получаются) и так легче рефакторить, легче либку затянуть банально

? animufag ?
05.06.2017
16:27:33
псевдокод let getAttributes = cond([ [isArray, compose(uniq, flatten, map(keys))], [isObject, compose(flatten, map(o(getAttributes, nth(1)), entries)], [T, _ => [] ], ])

Google
Vladimir
05.06.2017
16:31:02
И я не понял вопрос

Kirill
05.06.2017
16:31:53
И я не понял вопрос
Какой именно?

? animufag ?
05.06.2017
16:34:08
на скрине (асс, [, value]) нет идей

В последнем случае R.always([])
стрелочка покороче

Kirill
05.06.2017
16:35:18
Скорее всего хотели сделать первый элемент массива undefined через траллинг.

Либо опечатка.

? animufag ?
05.06.2017
16:36:34
ну я думаю там есть грандиозный умысел

прям не даёт покоя

Admin
ERROR: S client not available

Kirill
05.06.2017
16:38:10
А, нет тут рест.

Дмитрий
05.06.2017
16:38:34
Но сейчас пришлось переписать всё без рамды (можно приценить для сравнения) https://github.com/zerobias/telegram-mtproto/blob/feature/mtproto3/packages/mtproto-logger/src/string-transform.js Потому что от этой части кода требуется максимальное быстродействие ?

? animufag ?
05.06.2017
16:43:22
прям не даёт покоя
видимо энтриес — массив пар и это тип nth(1)

Сергей
05.06.2017
16:45:20
https://github.com/zerobias/telegram-mtproto/blob/master/src/util/log.js
Можно было плагин бабель рамда заюзать, чтобы не писать столько импортов

Дмитрий
05.06.2017
16:47:32
Можно было плагин бабель рамда заюзать, чтобы не писать столько импортов
Я это уже не в первый раз слышу)) Там с ним какие-то проблемы были

Плюс я это тоже не руками сгенерировал

Сергей
05.06.2017
16:48:26


А в чем профит переносить параметры и стрелку на новую строку?

Aleh
05.06.2017
16:51:37
одну большую строку на несколько маленьких

Дмитрий
05.06.2017
16:52:14
А в чем профит переносить параметры и стрелку на новую строку?
С типами строку разносит просто моментально, чуть-чуть порефакторил и вжух — у тебя +120 сиволов

Google
Aleh
05.06.2017
16:52:46
ну да, в два раза длиннее по сути

Дмитрий
05.06.2017
16:52:52
Вот тут самый хардкор ? https://github.com/zerobias/telegram-mtproto/blob/feature/mtproto3/packages/telegram-mtproto/src/layout/index.js#L28

Сергей
05.06.2017
16:53:08
Особенно если у переменной куда назначаешь функцию есть тип

Вот тут самый хардкор ? https://github.com/zerobias/telegram-mtproto/blob/feature/mtproto3/packages/telegram-mtproto/src/layout/index.js#L28
Лучше было бы обьектом все булевы необязательные, как минимум

Дмитрий
05.06.2017
16:54:02
Сергей
05.06.2017
16:54:10
Ну я к этому и пришёл пока что
Мне только это и спасает

Иначе нужно один параметр установить, приходится всю колбасу заполнять

мы юзаем f( a: A, b: B, c: C, ) {}
Тоже пишу с одинарным отступом

Дмитрий
05.06.2017
16:55:16
мы юзаем f( a: A, b: B, c: C, ) {}
В этой записи мне не нравится то, что аргументы и дальнейший код находятся на одном уровне. Можно поколдовать в еслинте и аргументы будут выравниваться на 4 пробела, но я пока так не пробовал

Aleh
05.06.2017
16:55:19
не, отступ там стандартный в рамках проекта(2 пробела)

Дмитрий
05.06.2017
16:56:16
Офк)

Дмитрий
05.06.2017
16:58:54
Особенно если у переменной куда назначаешь функцию есть тип
Тогда вообще сама собой складывается запись а ля фп) type SomeFunction = () => {} const someFunction: SomeFunction = () => {}

Сергей
05.06.2017
16:59:54
Дмитрий
05.06.2017
17:00:02
мы как раз юзаем такой, потому что его больше больше форматтеров поддерживают)
Хз, мне кажется нужен только один — eslint) Prettier например можно через eslint-prettier пустить

Сергей
05.06.2017
17:00:03
Твой вариант, Выглядит ничего так

Aleh
05.06.2017
17:00:48
пока еще

code4aman
05.06.2017
17:31:06

Страница 71 из 420