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

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

box)

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

26 ответов

11 просмотров

По-моему, это довольно красивый 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

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Привет, не могли бы подсказать почему "A tree falls in a forest" не отображается в journalctl? openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); syslog (LO...
•_• Asmanov 🎓
3
Карта сайта