
Dmitry
05.09.2018
14:40:34
Раст супер сложный язык, но когда смотришь на шаблонный C++, понимаешь что там настолько можно сделать все, что просто ППЦ

Alexey
05.09.2018
14:42:07
Как я понял, вопросы решаются именно концептуально. А не запоминанием шаблонов того, как и чего безопасно делать.
Концепции эти все вкусить примерно так же тяжело, как первое время в ерланг писать.

Google

Dmitry
05.09.2018
15:01:58
Но по сравнению с C++ Rust уже минималистичен ?

Dmitry
05.09.2018
15:02:25
Чет в последнее время меня сахар бесит в расте
Читаешь код - бред написан
А оказывается - при таких-то условиях он обозначает то-то
Кзлы блин
И так хрен разберешься

Dmitry
05.09.2018
15:07:51

Максим
05.09.2018
16:38:00

Dmitry
05.09.2018
16:38:47
В эликсире вроде норм пока что

Dmitry
05.09.2018
16:39:02

Dmitry
05.09.2018
16:39:31
Хотя я читал вчера RFC по сокращённому матчингу мапов

Google

Dmitry
05.09.2018
16:40:22
Что то типа
/%{x, y}s -> %{x: x, y: y}
Но к счастью такого пока не сделали
А будет херово если сделают

Dmitry
05.09.2018
16:41:50
И делают это года так эдак с 2015 точно.

Dmitry
05.09.2018
16:42:25
Ну вот другого сахарка я не видел пока что
Хотя... Менторю exercism, там очень хорошо видно как люди не понимают по гангста фичам
Но иногда такое выкапывают...

Dmitry
05.09.2018
16:43:38
https://github.com/meyercm/shorter_maps
Кстати, есть библиотека, которая sigil-у дает для этого, кому очень уж нужна эта фишка.
https://hex.pm/packages/shorter_maps - даже 9 других библиотек ее используют.

Dmitry
05.09.2018
16:46:47
Вот и пусть лежит в библиотеке
И всякие чувачки, которые не хотят чтобы их проект смог кто-нибкдь поддерживать потом ею пользовались

Evgeny
05.09.2018
16:53:59
В плюсах просто шаблоны выриглазные, вот в D - это другое дело.

Dmitry
05.09.2018
17:00:43
Заметил кстати, что много людей любит cond
Хотя я ни разу в жизни его не использовал
Вообще бы выкинул его из эликсира нафик
А из хорошего - чары через ?
Крче в эликсире сахарка мало, но все равно есть лишний) А в Расте его либо очень много, либо так кажется потому что я редко на нем пишу

Dmitry
05.09.2018
17:03:18
Между cond и if, я бы выкинул if.

Google

Dmitry
05.09.2018
17:03:43
if - частный случай cond и от того намного больший сахар в сравнении с cond.

Dmitry
05.09.2018
17:04:00
If я использую
А cond - нет)
Есть места для ифов, дефолтные из СТД
Типа if Code.ensure_compiled
И дальше простыня

Dmitry
05.09.2018
17:05:49
Есть core разработчик Elixir-а, кто использует cond и не использует if.

Dmitry
05.09.2018
17:05:49
А конд точно всегда можно в кейс переписать

Dmitry
05.09.2018
17:05:55
Это же субьективно.

Никита
05.09.2018
17:08:37
if частный случай case

Dmitry
05.09.2018
17:08:48
А есть места, где cond просто идеален и case с if-ом будут субоптимальны: cond do
count < max_count -> ...
value > min -> ....
true -> ...
end

Никита
05.09.2018
17:09:33
ну бывает тоже) обычно там, где лень отрефакторить и побить на более мелкие функции)

Dmitry
05.09.2018
17:09:46
Как по мне так if выглядит по другому
А cond|case одинково

Dmitry
05.09.2018
17:10:09
Вообще if - это макро, а cond и case - специальные формы.
if - это сахар.
А case|cond - это база языка.

Dmitry
05.09.2018
17:15:57
when ограничен гвардами

Никита
05.09.2018
17:16:00
да не, конд нужен иногда. но и отрефакторить тоже всегда можно)))

Google

Dmitry
05.09.2018
17:16:20
Отрефакторить, чтобы было сложнее читать?
cond в данном случае самый простой в чтении и понимании.

Никита
05.09.2018
17:16:42
ну это же все субъективно)
и зависит от ситуации)
у меня прост когда вылезает конд, начинаю чесать репу и, скорее всего, можно логику разбить чутка по-другому и конда не будет. лень - оставляю конд, не лень - рефакторю)
а так - пофик ваще)

Dmitry
05.09.2018
17:18:38
@Nekifirus name =
cond do
is_nil(name) -> {self(), mod}
is_atom(name) -> {:local, name}
is_tuple(name) -> name
end

Admin
ERROR: S client not available

Dmitry
05.09.2018
17:19:21
Ну, не знаю, местами это лучшее решение и зачем рефакторить в худшую сторону?

Никита
05.09.2018
17:20:03
субъективно. я бы снизу сделал 3 функции приватных. и матчил бы. ну вот так нравится). а тебе вот так нравится)

Dmitry
05.09.2018
17:20:16
Вот ни разу не встречал реальных мест где нужен конд

Dmitry
05.09.2018
17:20:17

Dmitry
05.09.2018
17:20:24
Где вы берете такой код...

Dmitry
05.09.2018
17:20:38

Aldar
05.09.2018
17:20:51

Никита
05.09.2018
17:21:12

Dmitry
05.09.2018
17:21:31

Dmitry
05.09.2018
17:22:05
Я знал, что пишу лучше мейнтейнеров Эликсира Ж)

Dmitry
05.09.2018
17:23:41
ну вот в случае с неймом, да, матчил бы параметры. а где-то в другом месте по-другому. это ж от контекста зависит.
cond do
is_nil(function) or is_nil(arity) ->
{"undefined function", false}
is_nil(module) ->
formatted_fun = Exception.format_mfa(module, function, arity)
{"function #{formatted_fun} is undefined", false}
function_exported?(module, :module_info, 0) ->
message(:"function not exported", module, function, arity)
true ->
message(:"module could not be loaded", module, function, arity)
end
И так далее, все это конечно можно разбить на функции с when

Google

Dmitry
05.09.2018
17:24:57

Dmitry
05.09.2018
17:25:08
Но по сути это будет в основном единственный refactoring, но я считаю вынесение именно условий в одно место, как в случае с cond в основном читается проще.

Никита
05.09.2018
17:25:50
можно подумать это я написал "Вот ни разу не встречал реальных мест где нужен конд" "Я конд не использую" "Вообще бы выкинул его из эликсира нафик"

Alexey
05.09.2018
17:26:26
cond do - норм. бывает нужен.

Dmitry
05.09.2018
17:26:26
А, да, написано "скорее всего".

Dmitry
05.09.2018
17:26:50
Меня не переубедили
Все равно

Dmitry
05.09.2018
17:26:57
Ну, у меня просто, cond не частая вещь, но где есть, оттуда не убрать.

Alexey
05.09.2018
17:27:12

Dmitry
05.09.2018
17:27:16
Даже в самых запущенных случаях мне матрицу легче воспринимать

Dmitry
05.09.2018
17:27:42
Меня не переубедили
Да, ну понятно, ты Бог, лучше чем ментейнеры Elixir-а знаешь, как писать Elixir или на Elixir-е... Тебя ни в чем не переубедить ?

Alexander
05.09.2018
17:27:47
iex(4)> b = << 63, 102, 111, 111 >>
"?foo"
iex(6)> padding_size = 1024 - bit_size(b)
992
iex(7)> b <> <<0 :: size(padding_size)>>
<<63, 102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
...>>
но тут уж дальше зависит от того, как у вас принята упаковка пакетов, надо понимать какой порядок байт принят в протоколе и всякое такое...

Dmitry
05.09.2018
17:28:20
Куда нам смертным ?

Dmitry
05.09.2018
17:28:26
Типа
case {foo?(a), bar?(b), bazz?(c)} do
{true, false, _} -> ...
Там конечно надо смотреть по ленивости

Dmitry
05.09.2018
17:30:00
Вот именно, сразу во всех приведенных выше случаях case-ом не заменишь.
Разве, что when-ы добавлять.
Либо рефакторить в приватные функции с when-ами.

Alexey
05.09.2018
17:30:51
лично мне when - сложный синтаксис. вероятно, потому, что я его использую еще реже, чем cond do