
Alex
02.10.2016
00:16:45
значит надо учитывать где этих данных нет и думать что делать
Ты можешь кастомные блоки обработчики навесить по желанию.
или выбрать только те где есть данные
вот так например vk.group.posts.title.reject(&:nil?)

Google

Alex
02.10.2016
00:18:16
это же от задачи уже зависит. Можешь написать конкретный кейс.

Nikolay
02.10.2016
00:27:39
сложна

Дмитрий
02.10.2016
00:53:18
es5, кстати

Alex
02.10.2016
01:06:50
Что за R кстати?

Дмитрий
02.10.2016
01:18:40
Бесточечная композиция функций - кайф)
ramdajs.com

Alex
02.10.2016
01:20:15
> Бесточечная композиция функций
just one question, why?

Дмитрий
02.10.2016
01:22:21

Alex
02.10.2016
01:22:47
В примере выше те же точки только больше символов
плюс, я могу написать например так
stuff
.map
.reject()
.select()
и также менять их местами и редактировать

Google

Alex
02.10.2016
01:23:34
только как правило это не нужно

Дмитрий
02.10.2016
01:23:41

Alex
02.10.2016
01:24:03
больше похоже на искуственное граничение?

Дмитрий
02.10.2016
01:24:14
Я для одного проекта делал точечную версию рамды, типа писать как у тебя, но это не то

Alex
02.10.2016
01:24:17
в этой рамде ведь принципиально другой подход верно? только я его не понимаю.

Дмитрий
02.10.2016
01:25:25
Плюс мне не нужно упоминать данные вообще

Alex
02.10.2016
01:25:34
А, тоже верно

Дмитрий
02.10.2016
01:25:38
http://fr.umio.us/why-ramda/

Alex
02.10.2016
01:25:40
я как то не подумал об этом.
У меня просто не помню чтобы нужно было вызывать что то чего мне не хватало.
обычно просто кастомный обработчик писал.

Дмитрий
02.10.2016
01:26:24
Ну это и есть кастомный обработчик, только в одну срочку)
Сейчас найду пример)

Alex
02.10.2016
01:26:59
у меня тоже в одну.
т.е я пытаюсь понять преимущества рамды в подходе, кроме того, конечно же что можно lazy назначить заранее (хотя в рубях недавно тоже стало можно)
(вроде)

Дмитрий
02.10.2016
01:29:17
У меня его нет, у меня на выходе функция, его принимающая

Google

Alex
02.10.2016
01:30:04
Да я понял что ты заранее все это назначаешь.
Для JS наверное и неплохая вещь.

Дмитрий
02.10.2016
01:31:42
Во, это один целиковый поток исполнения с кучей опций и обработок, читать снизу вверх
https://github.com/zerobias/speak-r/blob/develop/app/core/splitter.js
Правда наверное это не лучший пример, я тут кажется был мощно упорот, потому что я вообще не понимаю происходящего))

Alex
02.10.2016
01:32:26
> потому что я вообще не понимаю происходящего))
Перловые однострочники FTW
мне кажется как раз таки здесь однострочники вроде моего читабельнее.
например мне не нужно лезть к определению.

Дмитрий
02.10.2016
01:33:25
В смысле?)

Alex
02.10.2016
01:33:55
ну всмысле ты сначала создаешь определение где пайпаешь обработчики

Дмитрий
02.10.2016
01:34:04
Ну, это оно и есть

Alex
02.10.2016
01:34:04
а потом уже получившейся функции кормишь данные и она дает тебе результат

Дмитрий
02.10.2016
01:34:08
Да

Alex
02.10.2016
01:34:12
Вот, а у меня не надо лезть к определению.
оно сразу там где юзается.

Дмитрий
02.10.2016
01:34:30
А зачем? Я лучше напишу функцию один раз

Alex
02.10.2016
01:34:43
Потому что эти обработчики редко когда совпадают

Дмитрий
02.10.2016
01:34:56
В плане?
А если у тебя пришли не те данные, а ты от них с точкой что то вызываешь?

Alex
02.10.2016
01:35:10
В смысле не те данные?
как у тебя могут прийти не те данные?

Дмитрий
02.10.2016
01:35:32
Вместо массива - число, а ты от него .map делаешь

Google

Alex
02.10.2016
01:35:50
Может у меня еще объект придет?
Я все таки когда чайню обработчики я учитываю какие данные могут прийти, верно? если они приходят другие значит у меня так и так программа должна сломаться и я должен это увидеть.

Дмитрий
02.10.2016
01:41:12
Так программа не должна ломаться же) Она может обрабатывать пограничные случаи, предоставляя разные варианты выхода из ситуации
А не fatal error

Alex
02.10.2016
01:41:51
Не может программа не ломаться
У тебя всегда могут быть моменты которые ты не учел
и если программа вместо того чтобы выдать фатал станет unusable - будет хуже

Дмитрий
02.10.2016
01:42:40
Нет, она просто грамотно соберет данные для отладки и всё выведет в нужной форме

Alex
02.10.2016
01:42:49
не знаю точного термина. Когда программа сглотнет те данные которые не должна была и обработает как если бы было все ок.

Admin
ERROR: S client not available

Alex
02.10.2016
01:43:37
я сваливаюсь в FATAL ERROR потому что апишка не должна так отвечать ни в коем случае.
соотв пользователь видит "произошла ошибка, попробуйте позже".

Дмитрий
02.10.2016
01:44:36
А я спокойно собираю данные, для того, чтобы в ответ отправить важную для разработчиков инфу

Alex
02.10.2016
01:44:40
Всегда есть варианты которые сложно учесть.
разработчики курят логи
в логах все эксепшены есть.

Дмитрий
02.10.2016
01:45:03
А какие логи, если у тебя программа упала?

Google

Alex
02.10.2016
01:45:19
ну, я на рельсах

Дмитрий
02.10.2016
01:45:22

Alex
02.10.2016
01:45:34
оу, я про вебсайт говорил все это время ахах.
Извини.
Да, на фронте надо собирать данные для какого нибудь багснета.
Тем не менее представим что фронт сломался. Что ты покажешь пользователю? наверное в конкретном куске напишешь "извините произошла ошибка, попробуйте позже" верно?
по возможности оставив все остальное приложение работать.
Я сейчас в голове представляю react приложение если что.

Дмитрий
02.10.2016
01:47:13
Имея Maybe я не могу себе представить, как что-то вообще может идти "не так"

Alex
02.10.2016
01:47:41
запросто. Что то может пойти не так. Не обработанная ситуация.
Допустим никто не обрабатывал момент что этот микросервис отвалился, вариантов тысячи.

Дмитрий
02.10.2016
01:48:47
До тех пор пока не пришел ответ у меня объект имеет значение Maybe Nothing()

Alex
02.10.2016
01:49:58
ты ведь про фронт верно?

Дмитрий
02.10.2016
01:50:17
Ну не обязательно
На ноде это даже лучше работает

Alex
02.10.2016
01:50:33
Ну если про бэк то я просто сваливаюсь в FATAL ERROR
потому что это действительно не обработанная ситуация
и я должен ее быстро увидеть.
просто на фронте и бэке подходы кардинально отличаются.

Дмитрий
02.10.2016
01:52:11
Ну я скорее про сам подход
Если я попытаюсь вызывать у объекта Either.Right(serverResponse) какой то ключ, а его там не будет, то у меня будет объект Left('handler123 recived wrong data'), который автоматически безопасно пройдет через любые обработчики и будет корректно документирован любым способом