А давайте про оформление кода. Когда-то меня учили всегда выравнивать параметры один к другому:
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
)
));
Comments (12)
Впечатление от чайника со свистком, то бишь махрового любителя. Мне в финальном варианте было бы удобнее видеть throw таки в фигурных скобках. Насмотренность все же не профессиональная ).
Отчасти это я разбаловался, что даже блокнот теперь подсвечивает операторы
Я сама Notepad++ искренне люблю, просто конкретно я лучше форматирование замечаю ).
Со школы ненавижу условные операторы в одну строку. Прям кушать не могу.
А вот с параметрами - это правда, лучший вариант. Хотя в Java я так и не решился его внедрить, но в JavaScript именно так и делаю.
Но, в целом, я склоняюсь к выводу, что правила оформления должны быть минимальными состоять, предпочтительно, из запретов: как нельзя делать ни в коем случае. А всё остальное должно быть на усмотрение автора, в зависимости от ситуации. Довольно часто ради понятности кода приходится нарушать слишком жёсткие формальные правила.
я помню в своё время один большой питонщик высказал идею, что в pep8 конечно написано про строки максимум в 80; но стоит читать это как строки максимум в районе 80, а не считать знаки.
а почему в java нет? я пока везде внаглую так делаю, мне никто слова не сказал)))
В Java у меня десятилетиями отработанный стиль, пока не решился его сломать 😉 А на работе требуют пропускать через автоматический форматировщик и не выпендриваться.
Я любительствовать начинала давно, стандартов тогда не было, зато в каждой книжке был призыв смотреть глазами и думать головой - как ты будешь читать это дело через месяц. А одно из упражнений которое встречала - написать ифу колбасиновну с полудесятком условий, закрыть редактор, попить чайку и где-то через часик вернуться и попытаться за собой прочитать. Но - честно скажу - на самом старте все равно не доходило ).
Таким вещам по книжкам не учатся.
И это был главный вывод из того моего опыта ). Но совет с написанием многоэтажной ифы в ряд и попыткой ее прочитать через время был хорошим, хотя оценила я его много позже.
Я кстати понял почему я так делаю. Для меня
if () return ;
это отдельная идиома. То естьif () throw;
это известное действие которое называетсяassert
. Я даже по возможности вынимаю повторяющиеся проверки в функции типаassertStateOk(state)
. Я бы с радостью вынул иif return
так, но языки этого не позволяют по большей части. Наверное с какими-нибудь матч экспрешнами это выглядело бы в коде примерно как у меня в голове (псевдокод):