
Дмитрий
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

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

Kirill
05.06.2017
12:59:26

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

Дмитрий
05.06.2017
13:13:09

? 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 и т.д. смотрятся разношерстно)

Сергей
05.06.2017
16:05:06

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, _ => [] ],
])

Vladimir
05.06.2017
16:30:48
псевдокод
let getAttributes = cond([
[isArray, compose(uniq, flatten, map(keys))],
[isObject, compose(flatten, map(o(getAttributes, nth(1)), entries)],
[T, _ => [] ],
])
В последнем случае R.always([])

Google

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

Kirill
05.06.2017
16:31:53

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

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

Сергей
05.06.2017
16:45:20

Дмитрий
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

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
Особенно если у переменной куда назначаешь функцию есть тип

Aleh
05.06.2017
16:53:38

Дмитрий
05.06.2017
16:54:02

Сергей
05.06.2017
16:54:10
Иначе нужно один параметр установить, приходится всю колбасу заполнять

Дмитрий
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:05

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

Aleh
05.06.2017
16:56:36

Дмитрий
05.06.2017
16:58:54

Сергей
05.06.2017
16:59:54

Дмитрий
05.06.2017
17:00:02

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

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

code4aman
05.06.2017
17:31:06