← Timeline
Avatar
Eliyahu Duvidzon
(updated )

Я понимаю война, но я ничего не могу сказать про войну. Можно вон Russian-Ukrainian War почитать вместо меня.

А давайте про оформление кода. Когда-то меня учили всегда выравнивать параметры один к другому:

awesomeFooFunction(firstParam,
                   barFunc(42, 70),
                   secondParam);

Потом с одной стороны стало влом каждый раз руками двигать пробелы, а с другой у меня появилась идея. Форматирование оно про понятность и чтобы код не рос вправо и вниз. Именно в этом порядке. Так что:

awesomeFooFunction(
    firstParam,
    barFunc(42, 70),
    secondParam
)

Дальше, есть фигня про всегда и везде скобочки у ифа. Потому что запутаешься где внутри него, а где нет. Но для себя я решил, что в таких если команда на одной строке с условием, то не запутаешься. Кроме того см. выше. Так что я такую идиому использую:

if (condition(param1)) return DEFAULT_VALUE; // Short circuit

if (isInvalidState(param2)) throw Poo("Everything is wroong");

// Actual implementation

А теперь всё вместе:

if (isInvalidState(param2)) throw Poo(String.format(
    "Actual value of param2 is %s. Details: %s",
    param2, getErrorDetails(
        param1,
        param2,
        MAGIC_NUMBER
    )
));
To react or comment  View in Web Client
Comments (12)
Avatar

Впечатление от чайника со свистком, то бишь махрового любителя. Мне в финальном варианте было бы удобнее видеть throw таки в фигурных скобках. Насмотренность все же не профессиональная ).

👍1
Avatar

Отчасти это я разбаловался, что даже блокнот теперь подсвечивает операторы

👍1
Avatar

Я сама Notepad++ искренне люблю, просто конкретно я лучше форматирование замечаю ).

💡1
Avatar

Со школы ненавижу условные операторы в одну строку. Прям кушать не могу.

Avatar

А вот с параметрами - это правда, лучший вариант. Хотя в Java я так и не решился его внедрить, но в JavaScript именно так и делаю.

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

💯1
Avatar

я помню в своё время один большой питонщик высказал идею, что в pep8 конечно написано про строки максимум в 80; но стоит читать это как строки максимум в районе 80, а не считать знаки.

Avatar

а почему в java нет? я пока везде внаглую так делаю, мне никто слова не сказал)))

Avatar

В Java у меня десятилетиями отработанный стиль, пока не решился его сломать 😉 А на работе требуют пропускать через автоматический форматировщик и не выпендриваться.

Avatar

Я любительствовать начинала давно, стандартов тогда не было, зато в каждой книжке был призыв смотреть глазами и думать головой - как ты будешь читать это дело через месяц. А одно из упражнений которое встречала - написать ифу колбасиновну с полудесятком условий, закрыть редактор, попить чайку и где-то через часик вернуться и попытаться за собой прочитать. Но - честно скажу - на самом старте все равно не доходило ).

Avatar
Avatar

И это был главный вывод из того моего опыта ). Но совет с написанием многоэтажной ифы в ряд и попыткой ее прочитать через время был хорошим, хотя оценила я его много позже.

Avatar

Я кстати понял почему я так делаю. Для меня if () return ; это отдельная идиома. То есть if () throw; это известное действие которое называется assert. Я даже по возможности вынимаю повторяющиеся проверки в функции типа assertStateOk(state). Я бы с радостью вынул и if return так, но языки этого не позволяют по большей части. Наверное с какими-нибудь матч экспрешнами это выглядело бы в коде примерно как у меня в голове (псевдокод):

return match(param1, param2) {
    ([], _) => DEFAULT_FIRST_EMPTY,
    (stateFucked(param1, param2)) => throw new Error("y'know"),
    otherwise => {
        // Actual function body
    }
}
👍1
To react or comment  View in Web Client