2014-09-19 2 views
1

Просто из любопытства я задавался вопросом, почему отступ в операторах switch такой, какой они есть. Я ожидал бы, что перерыв; следует записывать в том же столбце, что и case:, как мы делаем с фигурными скобками в инструкции if.Вывод выписки из инструкции

Так почему же мы делаем это так:

case 1: 
    //do stuff 
    break; 

case 2: 
case 3: 
    //do stuff 
    break; 

И не нравится:

case 1: 
    //do stuff 
break; 

case 2: 
case 3: 
    //do stuff 
break; 

ответ

1

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

case 1: /*do stuff*/ break;case 3: case 2: /*do stuff*/ break; 

В пробельные символы, добавляемые не будет читаться компилятором. Мы добавляем пробелы и отступы, чтобы сделать наш код легко читаемым для других.

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

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

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

+1

Я знаю это, мой вопрос не проблема, но больше из любопытства, почему стандарт отступов для этого - так, как есть. Поэтому мой вопрос повторяется, потому что ваш пример можно перевести на ** if ($ i = 1) {/ * do stuff * /} if ($ i = 2) {/ * do stuff * /} ** Символ нарушения символа if} записывается в том же столбце, что и исходная фраза, в то время как это не относится к оператору switch. – Tim

+1

Случаи - это логические метки. Многие люди помещают метки на том же уровне отступов, что и блок, в котором они находятся. По-моему, таким образом легче читать текст. Я сравниваю это с временной шкалой, которую вы можете прокрутить. У вас есть маркеры на самой временной строке, а не на отступы. Затем вы можете быстро указать, где находятся метки/маркеры, не отводя глаз от базовой линии. Надеюсь, я смогу удовлетворить ваше любопытство. Если вы хотите, мы можем продолжать говорить об этом, мне это очень нравится. –

+0

Большое спасибо за ваш ответ, ярлык/шкала времени заставили меня задуматься. Я предполагаю ** break; ** следует интерпретировать как локальный ** exit(); ** или ** die(); ** для выхода из программы переключения вместо всего лишь случая. – Tim

0

ИМХО, первый пример более ясным, вы можете видеть каждый случай без барьеров. Второй пример сложнее, потому что на одном уровне есть случай и разрыв, и вы не можете так легко разделить блоки.

Смежные вопросы