Стили кодирования являются руководящими принципами, то, что допустимо, это то, что допускает определение языка.
Когда они используют термин legal в отношении стилей кодирования, они просто означают, что они примут.Пример
if (condition)
body();
специально выделен, поскольку он путает отступ с исполнением, что на самом деле не является частью спецификации языка Java.Другими словами, кто-то может взглянуть на
if (condition)
statement1();
statement2();
и подумать, что и Statement1, и Statement2 выполняются только тогда, когда условие истинно.Обратите внимание, что этот человек сделал бы умственную ошибку;Хороший стиль кодирования пытается свести к минимуму количество ментальных ошибок, которые могут возникнуть в умах других людей.
Правильно ли разрешить
if (condition) statement1();
- вопрос открыт.Для многих это приемлемо;однако это действительно та же проблема, что и в примере выше.Java не принимает решения на основе типа или количества пустого пространства, она принимает решения на основе наличия какого-либо пустого пространства.Другими словами, вы можете запутать кого-то, сделав это
if (condition) statement1(); statement2();
, где всегда выполняется оператор2;надеясь сбить их с толку, полагая, что выполнение Statement2 каким-то образом зависит от условия.Причина, по которой
if (condition) statement1();
является общепринятой, во многом связана с крайне редкой практикой видеть такие утверждения, как
if (condition) statement1(); statement2();
, но принятие версии без фигурных скобок не имеет ничего общегос фактическим улучшением качества кода, это просто иногда принимается, потому что обычно люди не пишут запутанные «все в одной строке» операторы if.
С помощью операторов if - единственный безопасный способ убедиться, что людине связывать поведение с пробелом - это всегда вставлять фигурные скобки.
if (condition) { statement1(); } statement2();
может выглядеть странно, но гарантированно предоставит достаточно визуальных подсказок, чтобы человек не допустил мысленную ошибку, думая, чтоВыполнение Statement2 зависит от Statement1.
Наконец,
if (condition) {
statement1();
}
statement2();
никогда никого не смущает.Единственная возможная стоимость - хранение нескольких дополнительных пробелов и добавление пары горизонтальных печатных строк.Учитывая, сколько памяти доступно, я бы сказал, что аргумент хранилища окончательно мертв.Аргумент о недвижимости на экране все еще остается;но иногда для того, чтобы идея была ясной, стоит несколько лишних строк на экране (а экраны сегодня намного больше, чем в прошлом).Когда кто-то учитывает стоимость потраченной впустую рабочей силы на поиск «неправильных идей» из-за «умственных ошибок» при чтении кода;кажется, что несколько дополнительных фигурных скобок здесь или там могут хорошо окупаться.
Кроме того, если вы используете тонны операторов if вплотную, вам, вероятно, было бы лучше использовать переключатель или полиморфизм.