@proelixir

Страница 892 из 1045
Никита
02.03.2018
15:08:07
если про кейз, то наш пример с Auth case Repo.get(Auth, id) do %Auth{} = auth -> {:ok, auth} _ -> {:error, :auth_not_found} end И вот с такой функцией можно спокойно в with ловить {:ok, auth} а в фолбэк контроллере ошибку) и else(ы) не нужны)

Dmitry
02.03.2018
15:09:21
Я так иногда делаю

Никита
02.03.2018
15:09:35
а я всегда)

правда иногда грешу с if)

Google
Никита
02.03.2018
15:11:01
auth = Repo.get(Auth, id) if auth, do: {:ok, auth}, else: {:error, :auth_not_found}

вот так с ифом)

Yuri
02.03.2018
15:12:39
блин, а что с if не так-то ?)))

Никита
02.03.2018
15:12:47
от лукавого

надо вообще cond все делать)))

Dmitry
02.03.2018
15:13:11
Не, конд это не то

Case - это православно

Вернее кошерно

Alexey
02.03.2018
15:14:53
блин, а что с if не так-то ?)))
https://github.com/inaka/erlang_guidelines#avoid-if-expressions

Dmitry
02.03.2018
15:15:59
quote do case unquote(condition) do x when :"Elixir.Kernel".in(x, [false, nil]) -> unquote(else_clause) _ -> unquote(do_clause) end end вот так выглядит код ифа

Нафига мне это использовать, если я сам могу написать

Yuri
02.03.2018
15:16:10
ясно, понятно

Dmitry
02.03.2018
15:16:14
case

Google
Никита
02.03.2018
15:18:00
ну вот теперь я и не буду ифы делать)))

john
02.03.2018
15:48:26
Пидарская штука
норм, штука на сам деле, зря ты так возвращает либо экземпляр класса либо нил все прекрасно матчится по этим двум кейзам оки и прочие плюшки можешь сам добавить на основе этого матчинга

ну то что никита говорит что любой :error проваливается в фолбек контроллер, это он неправ, это он недоглядел

john
02.03.2018
15:50:04
сам допиши тупл

Dmitry
02.03.2018
15:50:20
Ну так я и экто могу сам написать

john
02.03.2018
15:50:25
с чего бы экто должна возвращать тупл то?

пусть экземпляр класса вернет и довольно с нее

либо нил, все вполне понятно

Dmitry
02.03.2018
15:51:29
В эликсире нету классов

И экземпляров

john
02.03.2018
15:51:37
ой даниважно

Dmitry
02.03.2018
15:52:13
Экто делает запрос к бд

john
02.03.2018
15:52:15
вот ты говоришь тупл, а чо тупл то? чо сразу не вебстраницу то?

Dmitry
02.03.2018
15:53:03
Даже если по логике запрос пришёл и ничего не вернул, экто должна возвращать {:ok, nil}

Но никак не nil

john
02.03.2018
15:53:16
нил это ваще не ок

Dmitry
02.03.2018
15:53:26
Nil это ок

Если нету Some монады

А тут нету Some монады

Google
Dmitry
02.03.2018
15:54:03
Тут есть Result монада

Вот и весь ФП

john
02.03.2018
15:54:33
утибозеньки

Fey
02.03.2018
15:57:59
соглашусь насчёт {:ok, nil}, а то приходится такие ужасы творить: with %User{} = user <- Repo.get(User, id) || {:error, :not_found}

Dmitry
02.03.2018
16:00:20
На самом деле тут ещё надо подумать, где ок-Нил, а где ошибка

Repo.one наверное можно и ошибкой седлать

Repo.get - хз

Repo.get_by - наверное ок-нил

Сделали чтобы одной строчкой выкинуть из контроллера во вью

И получилось неконсистентное шило

Но, че уж там - остаётся только пользоваться и все

john
02.03.2018
16:02:59
вот потому и не сделан тупл, потому что кейзы разные бывают

где то это ок, а гдето не ок

ну и еще куча всяких плюшек, экто - это не просто запрос в базу

Dmitry
02.03.2018
16:04:19
Все остальные плюшки экто возвращают тупл

Кроме 4 функций

all, one, get, get_by

john
02.03.2018
16:05:18
и ты не догадываешься почему?

Dmitry
02.03.2018
16:05:47
Я уже сказал почему

Google
Dmitry
02.03.2018
16:06:21
И почему это говно - тоже сказал

john
02.03.2018
16:06:49
ну раз не догадываешься - подсказывать не буду

Dmitry
02.03.2018
16:07:02
Ты вообще очень логичный

john
02.03.2018
16:16:25
хуцпа

Alister
02.03.2018
16:16:52


Vladimir
02.03.2018
16:42:31
нытьё. Есть разумная причина нелюбить HR, вот пусть ей и занимаются

Максим
02.03.2018
16:45:03
А в чем проблема непосредственно со _всеми_ HR

Vladimir
02.03.2018
16:53:36
не знаю в чём проблема со _всеми_ HR

abc
02.03.2018
17:48:30
Кто работает с монгой из эликсира ? что-то лучше чем это https://github.com/ankhers/mongodb есть ?

AndreyWIN
02.03.2018
20:16:51
iex>"Hello"<>" world"

Sergey
02.03.2018
20:27:16
10 CLS 20 PRINT "HELLO STRANGER" 30 END

Кто работает с монгой из эликсира ? что-то лучше чем это https://github.com/ankhers/mongodb есть ?
Тут как минимум 3 есть: https://github.com/h4cc/awesome-elixir/blob/master/README.md#orm-and-datamapping

Dmitry
02.03.2018
23:39:43
По поводу if - он иногда очень полезен, потому что позволяет в одну строчку или компактнее других альтернатив записать то, что с case-ом получится как минимум в 4-е, примеры: decoding_opts = if atoms?, do: [keys: :atoms], else: [] # 1 строчка decoding_opts = # 5 строчек case atoms? do true -> [keys: :atoms] _ -> [] end decoding_opts = decoding_opts(atoms?) # 4 строчки с учётом new line defp decoding_opts(true), do: [keys: :atoms] defp decoding_opts(false), do: [] if data, do: send(self(), {:request, pid, data}) # одна строчка, компактно и понятно case data do # 4 строчки data when is_binary(data) -> send(self(), {:request, pid, data}) nil -> nil end with data when is_binary(data) <- "", do: send(self(), {:request, pid, data}) # verbose и длинная

Ни в одном из примеров нет более компактной и понятной альтернативы if-у.

Fey
03.03.2018
00:24:05
decoding_opts = atoms? && [keys: :atoms] || []

Dmitry
03.03.2018
00:28:05
@feymartynov Намного менее понятно

Fey
03.03.2018
01:27:35
кому как. одним такая запись вполне понятна, а другие вообще тернарки не признают, даже с if

Dmitry
03.03.2018
03:31:09
@feymartynov Не согласен. Я посмотрел в своём коде и в коде библиотек, очень часто встречаю if - ни в своём коде, ни в коде всех используемых библиотек такого && ... || патерна нет. Встретил один раз такую комбинацию в коде самого Elixir-а. (Я думаю считать сколько раз используется if во всех этих проектах для сравнения не имеет смысла, так как несколько порядков чаще). Здесь слишком сильный, однозначный, неоспоримый перевес у if-а по сравнению с формой && ... || , чтобы говорить "кому как". Большинству однозначно всё-таки if намного понятнее, иначе бы другая форма использовалась бы активнее.

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