169 похожих чатов

Box = Order.is_box?(order) && :box flex = Order.is_flexible?(order) && :flex do_lead_time(flex ||

box)

Коллеги, я понимаю как это работает. Но портебовалось время потратить. Как считаете, так писать это норм?
может лучше чуть больше букв но более ясно делать?

26 ответов

19 просмотров

По-моему, это довольно красивый maybe стиль

Только мне кажется, что тут неправильный порядок операций, и правильнее было бы type = if Order.has_flexible_items?(order) do :flex else Order.is_box?(order) && :box end

Drilla-_ Автор вопроса

Читается ужасно

V
Читается ужасно

У тебя просто глаз не привык

Lama Lover
У тебя просто глаз не привык

Пялюсь минуту и не могу понять чему может быть равно box То же про flex И далее по коду Какой нужно иметь глаз чтобы на этом не спотыкаться?

V
Пялюсь минуту и не могу понять чему может быть рав...

В эликсире есть 3 стиля обработки исключений, и каждый из них классный. Тут нужно иметь глаз работы с maybe стилем, в эликсире a && b || c это наш местный тернарный оператор, с ним очень удобно жить

Lama Lover
В эликсире есть 3 стиля обработки исключений, и ка...

По ссылке просто пиздец как хуёво. Тут ты вообще не делаешь вид что тебе не плевать на ошибку, если у тебя nil, то что-то сломалось и тебе поебать. Даже это предложение требует усилий на прочтение. Это одно предложение или два? Как вообще его правильно понять? С пятой попытки прочитать наиболее правдоподобный вариант - это Тут ты вообще не делаешь вид что тебе не плевать на ошибку. Если у тебя nil - то что-то сломалось, и тебе поебать. Почему б сразу не написать так чтобы читалось без запинки? Похоже, у автора это системное. Как бы ок, подход когда нужно высирать тонны кода в секунду тоже имеет право на жизнь, но не надо говорить что a && b || c - это ОК ДЛЯ ЧТЕНИЯ ПРОСТО ГЛАЗ НЕ ПРИВЫК. Это write-only код со всеми вытекающими.

V
По ссылке просто пиздец как хуёво. Тут ты вообще ...

Во-первых, автор это я. Во-вторых, a && b || c нормально читается, я серьёзно. Тернарные операторы используются и в C/C++ и в JavaScript, к этому просто надо привыкнуть

А, ну в этом случае так, да

интересно, а если оба false тогда что

Lama Lover
В эликсире есть 3 стиля обработки исключений, и ка...

Только вот этот стиль с && и || часто ведёт к тому, что у тебя выражения начинают возвращать что-то неожиданное, потому что люди не возвращают какое-то значение либо nil, а начинают мешать все типы, и тебе где-то на другом конце надо обрабатывать два типа NULL (nil и false). А потом ещё и огребать ошибки в непонятных местах, потому что границы разных кусков логики начинают протекать друг в друга.

with {_, false} <- {:box, is_box?(o)}, {_, false} <- {:flex, is_flex?(o)} do {:error, :unknown} else {type, true} -> do_lead_time(type) end

Vladimir Sekisov
with {_, false} <- {:box, is_box?(o)}, {_...

Это, наверное, худшее что я видел

Vladimir Sekisov
with {_, false} <- {:box, is_box?(o)}, {_...

самое читаемое решение

Vladimir Sekisov
with {_, false} <- {:box, is_box?(o)}, {_...

Основной путь получается в ветке else :(

V
Основной путь получается в ветке else :(

Не обязательно, возможно просто таким образом пытаются различные виды ошибок по-разному обрабатывать. Но все равно какашка. Уж лучше отдельную функцию сделать

Lama Lover
Ничего не понял

Ну смотри. У тебя тут выделяется два кейса: :flex и :box. Ты их обработал такой, но понимаешь, что должен быть ещё кейс. А что это такое? nil? false? В данном кейсе, понятно, что мы ожидаем false, но если такого кода становится много, ты уже не знаешь, чего ожидать. Плюс, ты действительно мог ввести дополнительный идентификатор — :regular, который бы обозначал другие кейсы, но из-за стиля у нас такие неочевидные повороты.

Андрей
Ну смотри. У тебя тут выделяется два кейса: :flex ...

Ну вот nil обычно означает кейс типа "здесь может быть не то что ты хочешь", а не какой-то логический кейс

Андрей
Ну смотри. У тебя тут выделяется два кейса: :flex ...

согласен. Дело не в количестве символов, дело в легкости понимания. Банальшина, но мы пишем код для людей. Вариант с cond самый читаемый и понятный, плюс к тому же открывает кейс когда он и не flex и не box

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта