@proelixir

Страница 839 из 1045
Evgeny
26.12.2017
10:41:04
или разбивают код на тучи маленьких функций?

Alexander
26.12.2017
10:48:51
Ребята, мы тут библиотечку опенсорснули, зацените: https://github.com/ExpressApp/struct

в hex пока не вылили, щас трэвис прикрутим и будет в hex'е

Dmitry
26.12.2017
10:52:49
Ребята, мы тут библиотечку опенсорснули, зацените: https://github.com/ExpressApp/struct
Мне кажется, или функционал повторяет экто процентов на 100?

Google
Dmitry
26.12.2017
10:53:21
Пока не понял, в чем фишки по сравнению с экто

Alexander
26.12.2017
10:53:39
это кажется, из экто там есть части по приведению типов, остальное с ней не связано =)

Dmitry
26.12.2017
10:54:49
А остальное это что? Валидация - как в экто, ошибки как в экто, кастомные типы как в экто

Я правда только ридми прочитал, может там какой фунуционал ещё есть

Marat
26.12.2017
10:56:52
А потом костыляют типы из говна и палок

Dmitry
26.12.2017
10:57:47
А потом костыляют типы из говна и палок
Валидировать все равно нужно

Alexander
26.12.2017
10:57:54
экто прибито к базе, ченжсетам и прочему гвоздями. Мы юзаем эту либку у себя внутри для валидации данных от юзеров и между сервисами + между контекстами. Очень помогает в тестировании и при написании поддерживаемого кода сложнее хелловорлд-блога :)

в сервисах где нет экто вообще, например

Dmitry
26.12.2017
10:58:54
Но я пока не замечал, чтобы экто был прибит гвоздями к базе

А чейнджсеты - это тоже что и ваш make

На выходе и список ошибок, и valid? функция

Google
Alexander
26.12.2017
11:00:33
на выходе либо ошибки, либо валидная структура

ну либо эксепшн, если с бангом

Dmitry
26.12.2017
11:01:03
Возможно это удобно, но я бы всё-таки учил одну либу, а не две. Хотя, надо попробовать будет

Как раз до нового года надо запилить бота в телегу ;)

Alexander
26.12.2017
11:02:31
мы еще парочку либ опенсорсим до конца года, например api_controller, он юзает Struct схемы в качестве валидаторов и кидает четкие ошибки в ответы

Alexander
26.12.2017
11:04:18
зачем? у нас весь стэк Elixir-only и он вполне нас устраивает, сделано это не ради строгой типизации, а ради валидации данных и упрощения поддержки кодовой базы

по поводу контроллера - есть первая версия в опенсорсе, её переделали на struct немного, получилось такое: defm :show, ShowChatRequest, fn(_conn, params) -> case Repo.get(GroupChat, params.uuid) do nil -> %Error{reason: "chat_not_found", code: 404} chat -> %Ok{result: chat_data(chat)} end end

ShowChatRequest - структурка определенная с помощью Struct

Aldar
26.12.2017
11:08:23
в фениксе 1.3 удобная обработка ошибок через action_fallback

Alexander
26.12.2017
11:08:27
если валидация непрокатит, кинет ошибку api стандартизованную

ага

Dmitry
26.12.2017
11:25:36
У нас grapgql в стеке

И короч он все сам валидирует

Alexander
26.12.2017
11:27:57
ну, поздравляю, у нас каналы и классический рест + мобильные клиенты

Dmitry
26.12.2017
11:28:40
Ну да, в рест нужна валидация

Alexander
26.12.2017
11:29:46
пушнули в hex: https://hexdocs.pm/struct/readme.html

Evgeny
26.12.2017
11:52:08
Вопрос по кодстайлу. Так писать нормально или есть менее вырвиглазный вариант? Map.merge(a, b, fn(_, d1, d2) -> Map.merge(d1, d2, fn(_, p1, p2) -> Map.merge(p1, p2) end) end)

эдакий глубокий мердж с глубиной 3

готовой подобной функции не нашел

Google
Анастасия
26.12.2017
11:54:22
есть put_in для одного элемента либо так, можно много элементов %{map | existing_elem => new_value}

Evgeny
26.12.2017
11:54:50
у меня элементы могут и не существовать

и вопрос таки больше по стилю, а не функциональности

как вообще принято писать?

а так-то можно рекурсивную функцию наваять, в которую пихать две мапы и глубину мерджа.

Анастасия
26.12.2017
11:58:14
у меня подозрение что можно написать намного проще, общепринятного метода нет потому что нет необходимости

лучше конечно рекурсию

Evgeny
26.12.2017
11:58:32
я не про метод, а про оформление самого кода

господи, ну что за убожество? нельзя писать |> fn(x) -> ... end нужно писать |> (fn(x) -> ... end).() чо за говно?

Vladimir
26.12.2017
12:18:39
ну то что в Эрланге писалось Var() в Эликсире пишут var.() Настолько сильно хотелось переменные с маленькими буквами, что ввели такую уродскую кострукцию, чтобы вызов функции из переменной можно было отличить от вызова по имени.

Taras ?
26.12.2017
12:19:16
в эрланге еще встречается V()().

Evgeny
26.12.2017
12:22:56
у меня анонимная лямбда, почему я не могу ее передавать как параметр?

Evgeny
26.12.2017
12:23:47
мало того, что синтаксис лямбд кривой, так еще и нелогичные вещи нужно делать

Taras ?
26.12.2017
12:24:21
почему это нельзя передать как параметр?

Evgeny
26.12.2017
12:25:05
А, пайп же требует вызов приросовать

а точка из-за того, что функция анонимная

Taras ?
26.12.2017
12:26:52
это отличщно что в эрланге нетуй пайпа))

Evgeny
26.12.2017
12:27:17
ну а что вложенные функции лучше?

Taras ?
26.12.2017
12:27:31
с пайпом можно строить вермишель не только вниз, как в js, но и во все стороны ))

больше нечитаемого кода богу нечитаемого кода! )))

Google
Evgeny
26.12.2017
12:27:49
в хаскеле хоть каррирование есть

Andrey
26.12.2017
12:28:30
господи, ну что за убожество? нельзя писать |> fn(x) -> ... end нужно писать |> (fn(x) -> ... end).() чо за говно?
таже проблема что и https://stackoverflow.com/questions/4578574/what-is-the-difference-between-lisp-1-and-lisp-2#4579608

Taras ?
26.12.2017
12:28:42
термин, которого я не слышал до того как первый раз услышал о хаскеле, термин, которого я все еще не понял видимо это все потому что я все еще глупенький

Andrey
26.12.2017
12:28:45
такое дизайнерское решение и нужно с этим жить

Evgeny
26.12.2017
12:29:08
мде

придется

главное логику уловить

хороши лямбды в D: foo(10, 20, (a, b) => a + b)

Taras ?
26.12.2017
13:05:12
уггу

Admin
ERROR: S client not available

Evgeny
26.12.2017
13:09:48
как правильно разбить на строки длинный список генераторов? Вот так не работает for a <- b, c <- d, e <- f do ... end

Alexey
26.12.2017
13:22:43
не надо просто юзать анонимные ф-ции в пайпах, это ухудшает читаемость. Лучше написать рядом, дать ей имя и спокойно передать

Vladimir
26.12.2017
13:24:02
так даже удобнее (ц)

Evgeny
26.12.2017
13:25:03
писать рядом элементарные функции как-то не очень

ладно, а что с генераторами? я до конца не врубаюсь как эликсир трактует переводы строк

по императивному делать вложенные for?

Andrey
26.12.2017
13:29:46
что именно ты хочешь сделать?

Alexey
26.12.2017
13:30:46
do должен быть на той же строке

Google
Alexey
26.12.2017
13:30:46
как правильно разбить на строки длинный список генераторов? Вот так не работает for a <- b, c <- d, e <- f do ... end

что и последнее выражение

Evgeny
26.12.2017
13:30:59
почему ты думаешь что не работает
я не думаю, я пробовал, там синтаксическая ошибка вылезает

Alexey
26.12.2017
13:31:42
for a <- b, c <- d, e <- f do ... end

Evgeny
26.12.2017
13:32:35
ага я уже нашел

for в той же строке, что и первое выражение, а do в той же что и последнее

какой изврат, бозе мой

среди разработчиков эликсира определенно не хватает сильных теоретиков языков программирования

Alexey
26.12.2017
13:36:45
ты просто не понимаешь как это используется

for a <- 1..10, b <- 1..10, do: IO.puts("#{a} -> #{b}")

Vladimir
26.12.2017
13:36:52
Дык. Хотели запилить быструю замену рубям, но получилось так как получилось. А ведь даже если бы просто сохранить классическое эрланговское именование функций и переменных, то скольких грабель можно было бы избежать! Ан нет, решили и тут отличиться.

Alexey
26.12.2017
13:36:54
вполне красиво

Evgeny
26.12.2017
13:37:15
возможно, я же сказал, что не врубаюсь как эликсир трактует переводы строк и прочие whitespace

Alexey
26.12.2017
13:37:16
просто не надо делать for с большим кол-вом генератором и потом вложенной логики внутрь

это усложнит дальнешее чтение

Taras ?
26.12.2017
13:37:44
какой изврат, бозе мой
* записывает в блокнотик * какой отличный комментарий

Alexey
26.12.2017
13:38:05
выносишь логику в отдельный метод, через for комбинируешь

Alexey
26.12.2017
13:38:51
да) В дальнейшем тебе будет проще это развивать

добавишь матчинг в ф-ции

и на каждом этапе будет нужная логика

Evgeny
26.12.2017
13:39:16
да ну? Я может нуль в эликсире, но в программировании далеко не нуль

потом носится по файлу, чтобы увидеть что-то вроде def sum(a,b), do: a + b

Страница 839 из 1045