Есть else while
без промежуточных брекеты считаются «безопасными» обслуживание мудрым?
Написание if-else
кода без скобок, как показано ниже ...
if (blah)
foo();
else
bar();
... несет в себе риск, потому что отсутствие фигурных скобок делает очень легким непреднамеренное изменение значения кода.
Тем не менее, ниже также рискованно?
if (blah)
{
...
}
else while (!bloop())
{
bar();
}
Или else while
без промежуточных скобок считается "безопасным"?
else while
выглядит неприглядно. Я бы использовалelse { while (condition) { ... } }
.if
оценивается только один раз, ноwhile
обозначает цикл, поэтому соединение обоих дает мне необоснованное ощущение, чтоif
это часть цикла ... каким-то образом ...else
предложении вы хотите сделатьwhile
и сделать что-то еще? Просто используйте брекеты, пожалуйста.Ответы:
Это напоминает мне этот код:
Каждый раз, когда вы комбинируете два типа блоков, забывая скобки и не увеличивая отступы, вы создаете очень сложный для понимания и поддержки код.
источник
Возможно, это потому, что я изучил свою сделку (еще когда), используя метод Структурной диаграммы сущности Джексона , но я согласен с мнением о том, что единственный правильный термин без скобок после
if
илиelse
является последующимif
(т. Е. Допускаетelse if
лестницу)Все остальное (без каламбура) оставляет возможность для недопонимания и / или вопросов обслуживания. Это центральный аспект идеи ОП, являющейся «небезопасной».
Я также был бы очень осторожен с тем, чтобы включать в
while()
одну строку сelse
- будь то в скобках или нет. Это не читается правильно для меня ... отсутствие каких-либо дополнительных масок отступа, что этоelse
пункт. А отсутствие ясности приводит к недоразумениям (см. Выше).Поэтому в этом примере я бы настоятельно советовал / рекомендовал (и настаивал в своей команде):
Конечно, я бы также ожидал увидеть подходящие комментарии.
-- Редактировать --
В последнее время Apple страдала от уязвимости SSL, вызванной плохим исправлением, которое добавило вторую строку в единую строку без скобок. Итак, давайте уложить идею, что одиночные линии без скобок в порядке?
источник
else while
я бы, наверное, даже не заметил, что в быстром просмотре кода был цикл, особенно если условие, которое я искал, было удовлетворено условием if.else while
без вмешательства брекеты считаются «безопасными» ?Меня всегда учили держать все в скобках, с отступом и комментариями. Я считаю, что намного легче читать и определять ошибки. Лично я чувствую, что модульность является ключевым фактором, поэтому я всегда писал бы код следующим образом:
источник
Я бы извлек метод и сделал это
См. Метод «извлечения метода», объясненный на сайте каталога рефакторинга :
источник
Я бы посчитал это плохой привычкой кодирования. Иногда это прекрасно работает, и у вас не будет проблем при компиляции и запуске кода. В других случаях это может привести к серьезным ошибкам, и вы потратите часы на исправление этой ошибки.
Всегда рекомендуется модулировать ваш код. Если вам нужно поместить цикл while в другую часть, поместите его в блок, чтобы другие при работе над вашим кодом могли легко понять логику.
Хорошей практикой является размещение кода в блоках. Это делает его более простым и легким для понимания и отладки.
источник
Было бы хорошо, если бы все так просто, хотя лично мне это не нравится, и я предпочитаю использовать фигурные скобки даже для самых простых блоков кода if / else. Это просто аккуратнее для меня.
Тем не менее, это может привести к путанице, когда вы вложите, если / else зацикливает некоторые с фигурными скобками, некоторые без. В то время как цикл в середине всех этих спагетти! Я работал с таким плохим кодом, и это кошмар для отладки и понимания. Это следует из первого пункта, это хорошо, когда все остается просто, и вы довольны этим, но потом приходят другие программисты и добавляют к нему что-то, вероятно, если еще в цикле while. Если это написано в первую очередь, тогда меньше шансов, что это произойдет.
Суть в том, чтобы прояснить ситуацию так, чтобы другие программисты могли сразу увидеть, что хорошо, а что нет. Напишите код, чтобы шаблон выглядел правильно и не раздражал.
Обратной стороной этого является то, что, возможно, я мог видеть некоторых людей, утверждающих, что в определенных случаях это выглядит хорошо. Если у меня есть ресурс, мне нужно выполнить эту обработку в другом месте, пока я жду, что-нибудь сделать. Даже тогда для меня все еще нет никакой разницы во вложении цикла while внутри блока else.
источник
Что ж, несмотря на то, что все спорят об использовании брекетов и, похоже, любят их, я на самом деле предпочитаю обратное. Я использую фигурные скобки только тогда, когда мне нужно, потому что я нахожу это более читабельным и лаконичным без.
... Я действительно нахожу это "
else while(...)
" замечательно читаемым! Это даже читается как обычный английский! Но я думаю, что все найдут это странным, потому что это, по меньшей мере, необычно.В конце концов, мы все склонны делать это безошибочным с фигурными скобками, хотя ... потому что, ну, вы знаете.
источник
else while(...) bar();
что-то вродеelse while(...) foobar(); bar();
:)Я всегда ставлю фигурные скобки, просто потому, что если вы спешите, вы можете добавить еще одну строку, сделать отступ, забыть фигурные скобки и почесать голову, что происходит. Я держу открывающую скобку на одной линии, но это не имеет значения. В обоих случаях лучше иметь их.
источник
Что такого плохого в брекетах, что так много людей стараются не писать их?
Какую проблему точно
else while
решить?Скобки дешевы и хороши, и они делают намерение кода очевидным и понятным, а не умным и остроумным.
Цитата философии Unix:
Правило Ясности: Ясность лучше, чем ум.
источник
Там нет ничего плохого в
так же, как нет ничего плохого в
в правильных обстоятельствах (ваши обстоятельства могут отличаться, но этот конкретный стиль лучше всего использовать, когда у вас много повторяющегося кода - тогда вид каждой строки важнее стилистического отступа)
Но если вы выберете один путь, придерживайтесь его - последовательность - это король. Итак, ваш второй пример очень плохой, так как выражение if имеет скобки для своего оператора, тогда как оператор while должен быть внутри скобок для предложения else, а не за его пределами.
кроме того, я видел этот код раньше:
и это было написано самим стандартом кодирования нацистами (который настаивал на скобках для всего).
источник
Современные IDE могут быть легко сконфигурированы для переформатирования (включая удаление или добавление ненужных скобок) и / или повторного создания кода при сохранении файла. Таким образом, ваш пример будет выглядеть автоматически, например
Отступ всегда делает гнездо легко видимым, даже без лишних скобок. Так что, если вам удастся применить такие настройки IDE, я не вижу риска.
Лично я нахожу код, который пропускает фигурные скобки и переносы строк, гораздо более читабельным, поскольку он избегает беспорядка:
Но, конечно, многие разработчики очень рады спорить о таких вещах вечно и целыми днями.
источник