Подтвердить что ты не робот

Почему странный отступ от операторов switch?

Почему в imho отсутствует отступ "case" - ключевые слова в выражении switch считаются хорошим стилем?

Отступ от ключевого слова "case", по-видимому, является параметром форматирования по умолчанию в каждой среде IDE:

switch (i){
case 0:
    break;
case 1:
    break;
}

в то время как я считаю этот формат более интуитивным:

switch (i){
    case 0:
        break;
    case 1:
        break;
}

Есть ли какая-то логика, которая ускользает от меня?

4b9b3361

Ответ 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
}