Почему странный отступ от операторов switch?
Почему в imho отсутствует отступ "case" - ключевые слова в выражении switch считаются хорошим стилем?
Отступ от ключевого слова "case", по-видимому, является параметром форматирования по умолчанию в каждой среде IDE:
switch (i){
case 0:
break;
case 1:
break;
}
в то время как я считаю этот формат более интуитивным:
switch (i){
case 0:
break;
case 1:
break;
}
Есть ли какая-то логика, которая ускользает от меня?
Ответы
Ответ 1
Случаи являются логическими метками. Многие люди помещают метки на том же уровне отступов, что и блок, в котором они находятся. По-моему, таким образом легче читать текст.
Я сравниваю это с временной шкалой, которую вы можете прокручивать. У вас есть маркеры на самой временной строке, а не на отступы. Затем вы можете быстро указать, где находятся метки/маркеры, не отводя глаз от базовой линии.
Ответ 2
В 4 словах: нет блоков, нет отступов.
Случаи не открывают блок. В C или С++ вы даже можете помещать объявления переменных (но инициализаторы не вызываются, кроме статических переменных, что является ошибкой) в начале блока переключателей. Вы можете сделать много странных вещей с помощью switch
, например устройства Duff.
Следовательно, поскольку случаи - это просто метки, отступы от них не кажутся интуитивно понятными, а не отступы - это стиль, выбранный большинством стилей.
Ответ 3
Официальные Oracle Кодовые соглашения для языка программирования Java TM (раздел 7.8) рекомендуют стиль переключателя, в котором case-заявления не имеют отступ по отношению к оператор switch в целом.
Это субъективный выбор, но Солнце решило, что лучше, если все придерживаются одного стиля и выбрали это.
Ответ 4
Существуют разные стили отступов. AFAIK, ни один не считается лучшим стилем, чем другие, если вы постоянно используете стиль отступов. Для меня отступы case
более читабельны, то же самое относится к ярлыкам private
, protected
и public
в классах, однако моя среда IDE не будет делать отступы по-моему. Мой код не такой читабельный, как хотелось бы. О, хорошо...
Ответ 5
Может быть, он должен поддерживать тот же уровень отступов, что и его логический эквивалент, выраженный в статусах if
? То есть:
switch(i){
case 0:
//do something 1
case 1:
//do something 2
}
Похоже на его логический эквивалент:
if(i==0){
//do something 1
}else if(i==1){
//do something 2
}