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


почему imho отсутствует отступ" case " - keywords в операторе switch считается хорошим стилем?

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

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

хотя я нахожу этот формат более интуитивным:

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

5 ответов:

случаи логически метки. Многие люди помещают метки на тот же уровень отступа, что и блок, в котором они находятся. На мой взгляд, таким образом легче читать текст.

Я сравниваю его с временной шкалой, которую вы можете прокрутить. У вас есть маркеры на самой временной линии, а не отступы в содержании. Затем вы можете быстро указать, где находятся метки / маркеры, не отрывая глаз от базовой линии.

в 4 слова: нет блоков, нет отступа.

случаи не открывают блок. В C или C++ вы даже можете поместить объявления переменных (но инициализаторы не называются, за исключением статических переменных, это ловушка) в начале блока выключателя. Вы можете сделать много странных вещей с switch, Как устройство Даффа.

следовательно, поскольку случаи-это просто ярлыки, отступ их не кажется интуитивным, и не отступ-это стиль выбирается по большинству стилей.

официальный оракул 1999 года соглашения кода для языка программирования Java TM (раздел 7.8) рекомендует стиль коммутатора, в котором операторы case не отступаются относительно оператора switch в целом.

это субъективный выбор, но солнце решило, что лучше если все будут придерживаться одного стиля, и выбрал этот.

существуют различные стили отступов на выбор. AFAIK, ни один из них не считается лучшим стилем, чем другие, если вы постоянно используете стиль отступа вообще. Для меня, отступ case метки более читабельны, то же самое касается private,protected и public метки в классах, однако, моя IDE не будет делать отступ мой путь. Мой код не так читаем, как хотелось бы. Ну что ж...

возможно, он должен поддерживать тот же уровень отступа, что и его логический эквивалент, выраженный в if statments? То есть:

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
}