@proelixir

Страница 1020 из 1045
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
cachex началь юзать недавно, проблем пока не наблюдали
https://gist.github.com/liveforeverx/5f6426e1060ea2c234201dc0da35dba6

cachex началь юзать недавно, проблем пока не наблюдали
Вот это я имею ввиду, ключи разные, но транзакции блокируются. А еще он внутренности транзакции копирует в другой процесс, т.е. транзакции гонять через один GenServer - это не очень хороший дизайн.

Максим
05.09.2018
16:38:00
Чет в последнее время меня сахар бесит в расте
странно читать эту предъяву в канале про элексир:)

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

Dmitry
05.09.2018
16:39:02
странно читать эту предъяву в канале про элексир:)
В Elixir-е весь сахар можно на пальцах пересчитать.

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 - это база языка.

ну бывает тоже) обычно там, где лень отрефакторить и побить на более мелкие функции)
К примеру, в примере с 3-мя условиями (равноправными) - разбив на функции - это будет будет 3 функции с короткими телами, где when count < max_count и when value > min, либо аналогичный case с такими же whens.

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
Где вы берете такой код...

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
ну вот в случае с неймом, да, матчил бы параметры. а где-то в другом месте по-другому. это ж от контекста зависит.
Рефакторинг должен упрощать чтение когда, а подход с объявлением множества одинаковых функций с матчингом аргументов - сложно читать. case/cond в этих случаях как-то логичней, мне кажется

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

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