Случаи переключения Java: с фигурными скобками или без них?


рассмотрим следующие два фрагмента с фигурными скобками:

switch (var) {
  case FOO: {
    x = x + 1;
    break;
  }

  case BAR: {
    y = y + 1;
    break;
  }
}

без скобок:

switch (var) {
  case FOO:
    x = x + 1;
    break;

  case BAR:
    y = y + 1;
    break;
}

Я знаю, что в фрагменте с фигурными скобками создается новая область, заключая каждый случай в фигурные скобки. Однако, если каждый случай не нуждается в новой области (т. е. имена переменных не используются повторно), существует ли какой-либо штраф за использование фигурных скобок с делом?

9 77

9 ответов:

есть ли какой-либо штраф за использование фигурных скобок с делом?

нет.

фигурные скобки предназначены для того, чтобы помочь компилятору определить область видимости переменной, условия, объявления функции и т. д. Это не влияет на производительность среды выполнения после компиляции кода в исполняемый файл.

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

отсутствие штрафа за производительность с точки зрения исполнения.

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

а теперь для мнения часть нашего поста... Я всегда вставляю { и }, потому что есть штраф за ремонтопригодность в том, что вам, вероятно, придется поставить их позже, и это может быть боль положу их позже... но это 103% личных предпочтений.

как мы знаем, фигурные скобки для случаев переключения не нужны. Использование фигурных скобок может привести к путанице в отношении объема обращения.

открывающая скобка обычно ассоциируется с чем-то значимым, таким как начало функции или начало цикла или начало объявления класса или начало инициализации массива и т. д...Мы знаем, что случай выходит из блока коммутатора, когда он сталкивается с оператором break. Таким образом, использование фигурных скобок, по-видимому, подразумевает идею другой области для случая невежественный читатель. Таким образом, лучше избегать использования фигурных скобок ради лучшей читаемости программирования.

т. е. когда у меня что-то вроде

switch(i)
{
  case 1 :
  {
     //do something
  }
  System.out.println("Hello from 1");

  case 2: 
  ....
}

" привет от 1 " печатается. Но использование фигурной скобки может предложить невежественному читателю, что случай заканчивается на"}", уже зная, что фигурные скобки обычно означают в случае петель, методов и т. д.

как у нас есть операторы перехода к метке в 'C' элемент управления просто переходит в case и продолжает его исполнение. Итак, с таким пониманием это просто плохая практика использовать фигурные скобки при написании случаев для switch.

Технически говоря, вы можете заключить любой блок кода с дополнительной парой фигурных скобок при использовании с допустимым синтаксисом. Использование фигурных скобок в switch выглядит так плохо, по крайней мере, для меня, поскольку это, кажется, дает другое ощущение, как я сказал выше.

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

с фигурными скобками.

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

  1. забывая перерывы и, таким образом, имея случай провалов
  2. забывая случай по умолчанию и, таким образом, не ловя не обслужен условие
  3. случайное повторное использование переменных между операторами case или, что еще хуже, влияние на переменную, которая разделяет переменную между case заявления.

использование фигурных скобок является одним из способов предотвращения как преднамеренного, так и случайного обмена переменными между операторами case

этот вопрос, вероятно, будет закрыт как "аргументативный" (BRACE WAR!), но какого черта. Мне вообще-то нравятся брекеты после дел. Для меня это делает уродливый синтаксис коммутатора более похожим на остальные языковые конструкции. (В этом "случае" нет штрафа за использование фигурных скобок)

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

фигурные скобки на самом деле наиболее полезны, чтобы убедиться, что вы не используете одну и ту же переменную в разных cases по ошибке. Сегодня они не объявляют никаких переменных, но кто-то добавит их завтра, и без фигурных скобок код подвержен ошибкам.

Я бы не стал использовать скобки для случаев переключения.

  • оператор switch выглядит достаточно барочно уже без фигурных скобок.

  • случаи переключения должны быть очень короткими. Когда вам нужно объявить переменные, это признак того, что вы делаете это неправильно.

теперь перейдем к поддержанию некоторого унаследованного кода C, который использует случаи переключения 500 + строк ...

Я никогда не думал об этом раньше. Никогда не нуждался в фигурных скобках в предложении case, поэтому не могу понять, зачем они вам понадобятся. Лично я не иду на идею "будет легче поддерживать", это просто мусор, его будет легче поддерживать, если код имеет смысл и документирован.

нет брекетов ... меньше синтаксиса-больше