@frp_ru

Страница 37 из 420
Vasiliy
21.02.2017
14:29:43
о, кстати да, спасибо)

from
21.02.2017
14:30:21
:)

Vasiliy
21.02.2017
14:54:52
о, кстати вариант, спасибо только там ф-ция вместо value, но тем лучше) change: ({ setState }) => (event: React.FormEvent<HTMLInputElement>) => setState(evolve({ [event.currentTarget.name]: always(event.currentTarget.value) }), toggle: ({ setState }) => (event: React.FormEvent<HTMLInputElement>) => setState(evolve({ [event.currentTarget.name]: not })),

Google
Дмитрий
21.02.2017
15:06:55
В целом да. Естественно любая из них может быть Nothing
const set1 = [Maybe.of({ title: 'Russia' }), Maybe.of({ name: 'Moscow' })] const checkMaybe = ifElse(__, Maybe.of, Maybe.Nothing) const checkProp = pipe(has, checkMaybe) const getProp = propName => pipe( chain(checkProp(propName)), map(prop(propName))) const propsPair = pipe( map(getProp), useWith(pair), apply ) const titleNameProps = propsPair(['title', 'name']) const onlyOne = pipe(length, equals(1)) const joinProps = pipe( sequence(Maybe.of), map(join(', ')) ) const setTransform = pipe( titleNameProps, reject(Maybe.isNothing), cond([ [onlyOne, head], [isEmpty, Maybe.Nothing], [T, joinProps] ])) setTransform(set1)

На выходе так же будет внутри монады

https://goo.gl/aew1za

Бесит что в рамде нет функций, применяемых сразу к длине ?

Приходится pipe ( length, func ) городить

from
21.02.2017
15:15:17
const set1 = [Maybe.of({ title: 'Russia' }), Maybe.of({ name: 'Moscow' })] const checkMaybe = ifElse(__, Maybe.of, Maybe.Nothing) const checkProp = pipe(has, checkMaybe) const getProp = propName => pipe( chain(checkProp(propName)), map(prop(propName))) const propsPair = pipe( map(getProp), useWith(pair), apply ) const titleNameProps = propsPair(['title', 'name']) const onlyOne = pipe(length, equals(1)) const joinProps = pipe( sequence(Maybe.of), map(join(', ')) ) const setTransform = pipe( titleNameProps, reject(Maybe.isNothing), cond([ [onlyOne, head], [isEmpty, Maybe.Nothing], [T, joinProps] ])) setTransform(set1)
не подумайте, что я мегаспор хочу устроить или намеренно покритиковать, но по-моему такой код — неадекватно для задачи "взять name у одного объекта, title у другого и вывести строкой" неужели fp не позволяет записать эту простую мысль простым образом?... Вроде как fp подразумевает, что мы не создаём ненужные переменные, а здесь их создано 8 (!) штук. Только конечно мы себя обманываем и говорим, что эти переменные, разумеется, "жутко полезные функции, которые можно повторно использовать".

Дмитрий
21.02.2017
15:15:55
Просто ramda-fantasy не то, чтобы балует нужными функциями

"Карта, ложка, иди копай"

В этом плане sanctuary получше будет, и короче

from
21.02.2017
15:17:20
гм, ну надеюсь))

Дмитрий
21.02.2017
15:17:46
Ну и про рамду я уже пожаловался

Я хотел сделать либу поверх неё, чтоб сама разбирала вызовы типа R.lengthGt0

Но прокси в жс тормозят

Google
Дмитрий
21.02.2017
15:18:38
Жизнь боль

А, и паттерн матчинг не завезли, из-за этого с cond тоже не оч изящно выглядит

from
21.02.2017
15:30:15
И я уж прошу прощения за совсем неприличные вещи, но реально всё функциональное решение вот: const address = [ (city || {}).name, (country || {}).title, ] .filter(x => x) .join(', '); без зависимостей

from
21.02.2017
15:39:44
https://goo.gl/6uPpjH ?
вот только joinMaybes не соответствует названию, выдаёт массив скорее это mapMaybes. Тоже довольно таинственное название. Но в целом читаемо уже :)

Дмитрий
21.02.2017
15:40:28
А в виде функции оно вжух! и теряет особую разницу с решением из sanctuary

const joinMaybes = useWith( pipe(pair, S.justs, join(', ')), [ chain(S.get(String, 'name')), chain(S.get(String, 'title')) ]) joinMaybes( city, country )

Evgeny
21.02.2017
16:20:24
andretshurotshka?❄️кде
21.02.2017
16:27:48
http://davidchase.github.io/ramtuary/
уже использую да) только там console.log не перехватывает как в ramda repl

Vladimir
24.02.2017
01:56:29
https://www.reddit.com/r/functionalprogramming/comments/5vopkq/functional_architecture/?st=IZJ62CS8&sh=3aa3abea

Yumi
24.02.2017
02:23:42
сам хотел тут спросить. круто.

Vladimir
24.02.2017
03:10:05




Дмитрий
24.02.2017
07:30:56
Ну про джаву веселее было)

Alex
24.02.2017
08:00:52
Про указатели еще смешней)

Дмитрий
24.02.2017
08:02:01
Alex
24.02.2017
08:05:18
Я даже не знаю как найти

Google
Alex
24.02.2017
08:05:21
Там типа

-Какая у тебя глубина указателей? -Ну тип 2-3 -Бедняжка, смотри, Void ******************

Дмитрий
24.02.2017
08:08:31
?

Дмитрий
24.02.2017
10:06:22
Ну т.е. это старая добрая императивщина с лишними абстракциями
Тут всё банально, чистая ramda-fantasy — это es3 без lodash

Чтобы использовать map нужно написать map)

Причём, скорее всего, есть варианты и лучше

Без in-place императивщины с вжух-магией .filter(x => x)

andretshurotshka?❄️кде
24.02.2017
12:51:12
вжух

Дмитрий
25.02.2017
09:36:16
Про код, который предлагался в качестве альтернативы) Намертво захардкоженый

Дмитрий
25.02.2017
09:38:22
О, вот и ещё две строчки прилетело))

Aleh
25.02.2017
09:38:48
Не, количество строк не изменилось)

Дмитрий
25.02.2017
09:40:15
Как и изящный хак с` .filter(x => x)`

from
25.02.2017
09:40:42
Про код, который предлагался в качестве альтернативы) Намертво захардкоженый
плохой аргумент, а создание мини-языка программирования (это я про набор получившихся функций на рамде) специально под случай "взять name и title" это мегауниверсальный не-хардкод) А если задача такая. Есть объект x = { prop: 42 }. Надо взять prop. Я запишу — x.prop. Твоя реакция — "это хардкод"? ) :)

Google
from
25.02.2017
09:40:59
Как и изящный хак с` .filter(x => x)`
ну это не хак, а identity-что-то там ?

from
25.02.2017
09:42:52
Это неочевидный приём
Хорошо. А если я напишу .filter(identity), предварительно определив identity, это перестанет быть хаком?

Дмитрий
25.02.2017
09:44:55
Вы упорно игнорируете замечания о том, что это особенности конкретной либы, и половина функций — универсальные хелперы

from
25.02.2017
09:45:00
А теперь сравни это с решением на sanctuary)
кстати, а ты его показывал?

Дмитрий
25.02.2017
09:45:11
Ох

Окей

Дмитрий
25.02.2017
09:45:45
Да

Это по прежнему фиговый код

Потому что есть пути гораздо оптимальнее но мне уже надоело

Но который показывает, сколько всего зависит от выбранной либы и того, чего в ней нет

Вообще, вы кстати как то ловко игнорируете условия задачи

Объекты уже в Maybe

И на выходе желательно бы тоже его вернуть, но это уже ладно, пофиг

from
25.02.2017
09:48:04
Это по прежнему фиговый код
Ну а какой хороший? : / Опять же, я не хочу что-то глобально плохое про фп сказать. Но надо же разумно смотреть на то, что получилось. Читаю вот книжечку как раз, там фраза > Be warned, however, pointfree is a double-edged sword and can sometimes _obfuscate intention_. Not all functional code is pointfree and that is O.K. И мне кажется она не про только pointfree уместна, а гораздо шире)

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

Дмитрий
25.02.2017
09:51:06
В любом случае, синтаксис жс плохо предназначен для ёмкого фп

Я просто тут PureScript потыкал ?

Google
Дмитрий
25.02.2017
09:56:20
Который как хаскель, но с нормальным интеропом в js

Рекурсию до while разворачивает, и прочие умные штуки под капотом

Ну и короче там такое выглядит не в пример лучше

from
25.02.2017
10:00:43
Вы упорно игнорируете замечания о том, что это особенности конкретной либы, и половина функций — универсальные хелперы
я бы охотно поверил. Но разве это правда так? Я вижу восемь функций checkMaybe, checkProp, getProp, propsPair, titleNameProps, onlyOne, joinProps, setTransform Какие из них _реально_ универсальные? (понятно что теоретически при особой "удаче" все могут где-то пригодиться) Все? Половина? Первые три вполне реюзабельны и по их названию понятно, что они делают. Остальные... хм, тоже возможно могут пригодиться, но вот названия у них как раз не особо. propsPair? С ходу понятно, что это? joinProps? Джоин каким символом? setTransform? Я таким названием могу почти все обработчики серверных ответов назвать :) titleNameProps ладно уж, её инлайнить можно было В общем не знаю, может когда-то я тоже на подобном языке заговорю :) Но пока что просто кажется, что кто-то перебарщивает

Дмитрий
25.02.2017
10:00:45
Хотя от мануала с разговором о profunctors optics ещё в первой трети, становится слегка не по себе конечно ?

from
25.02.2017
10:01:06
Ну и короче там такое выглядит не в пример лучше
тоже готов поверить :) А можно пример решения?

Дмитрий
25.02.2017
10:02:22
Судя по течению диалога, после предоставления решения на purescript, ты будешь активно хейтить решение на Sanctuary

from
25.02.2017
10:02:43
А это плохо?)

Дмитрий
25.02.2017
10:04:15
Игнорировать сообеседника? Ну как тебе сказать

andretshurotshka?❄️кде
25.02.2017
10:05:56
?

from
25.02.2017
10:08:56
Дмитрий
25.02.2017
10:09:35
Я это уже давно заметил

Я в четвёртый раз за диалог повторяю тебе, что решение на требуемой библиотеке попросту неоптимально изначально, к чему был весь этот код ревью выше? Я понимаю тебе в кайф блестще расписать всё, но за нитью диалога то надо следить

from
25.02.2017
10:16:24
Ок, на выходе — два решения, которые ты сам же называешь хреновыми, и фразы "нормальные решения правда-правда есть при нормальных языках / либах, но т.к. надоело, их писать не буду". Хорошо. Однажды сам приду к этим решениям. А то что что собеседник что-то "игнорирует" сказать легко. У нас чат, а не устный диалог, сообщения сохраняются. Если я что-то пропустил или "проигнорировал" — скопируй снова, или дай ссылку, или как угодно.

Дмитрий
25.02.2017
10:16:55
Ясно

from
25.02.2017
10:17:12
Я в четвёртый раз за диалог повторяю тебе, что решение на требуемой библиотеке попросту неоптимально изначально, к чему был весь этот код ревью выше? Я понимаю тебе в кайф блестще расписать всё, но за нитью диалога то надо следить
Ок, может быть я недостаточно ясно свою позицию высказал — мне в принципе всё равно, какую библиотеку использовать. Интересно посмотреть на хорошее функциональное решение. И всё

Aleh
25.02.2017
11:03:44
в хаскеле я бы записал это как-то так https://goo.gl/JuvrCP но в жс оно требует тянуть бессмысленную либу, в которой определены все эти Maybe, хотя оно уже итак есть с другими названиями и записано в коде @everdimension

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