[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;
}

중괄호가있는 스 니펫에서 각 케이스를 중괄호로 묶어 새 범위가 생성된다는 것을 알고 있습니다. 그러나 각 케이스에 새 범위가 필요하지 않은 경우 (즉, 변수 이름이 재사용되지 않음) 케이스와 함께 중괄호를 사용하면 성능이 저하됩니까?



답변

케이스에 중괄호를 사용하면 성능이 저하됩니까?

없음.

중괄호는 컴파일러가 변수, 조건, 함수 선언 등의 범위를 파악하는 데 도움이됩니다. 코드가 실행 파일로 컴파일되면 런타임 성능에 영향을주지 않습니다.


답변

실행 관점에서 성능 저하가 없습니다.

구문 분석 할 것이 더 많기 때문에 컴파일 관점에서 약간의 성능 저하가 있지만 실제로 우려되는 사람이 있다면 코드를 한 줄에 모두 작성해야합니다. 🙂

그리고 이제 우리 게시물의 의견 부분에 대해 … 저는 항상 {및}를 입력했습니다. 유지 관리에 대한 불이익이 있기 때문에 나중에 입력해야 할 가능성이 높고이를 두는 것이 고통 스러울 수 있습니다. 나중에 …하지만 그것은 103 % 개인 선호도입니다.


답변

우리가 알고 있듯이 스위치 케이스에 대한 중괄호가 필요하지 않습니다. 중괄호 케이스를 사용하면 케이스 범위에 대해 혼동을 일으킬 수 있습니다.

여는 중괄호는 일반적으로 함수의 시작, 루프의 시작, 클래스 선언의 시작 또는 배열 초기화의 시작 등과 같은 의미있는 것과 연관됩니다 … 우리는 케이스가 브레이크를 만났을 때 스위치 블록을 벗어난다는 것을 알고 있습니다. 성명서. 따라서 중괄호를 사용하는 것은 무지한 독자에게 케이스에 대한 다른 범위의 아이디어를 암시하는 것처럼 보입니다. 따라서 프로그래밍 가독성을 높이기 위해 중괄호를 사용하지 않는 것이 좋습니다.

즉, 내가 뭔가를 가질 때,

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

  case 2:
  ....
}

“Hello from 1″이 인쇄됩니다. 그러나 중괄호를 사용하면 대소 문자가 ‘}’로 끝나는 무지한 독자를 시사 할 수 있으며, 루프, 메서드 등의 경우 중괄호가 일반적으로 무엇을 의미하는지 이미 알고 있습니다.

‘C’에 레이블로 이동하는 문이있는 것처럼 컨트롤은 case로 이동하고 실행을 계속합니다. 따라서 스위치 케이스를 작성할 때 중괄호를 사용하는 것은 나쁜 습관입니다.

기술적으로 말하면 유효한 구문과 함께 사용할 때 추가 중괄호 쌍으로 코드 블록을 둘러 쌀 수 있습니다. 스위치에서 중괄호를 사용하는 것은 위에서 말한 것처럼 다른 느낌을주는 것처럼 보이므로 적어도 나에게는 너무 나빠 보입니다.

내 제안 : 스위치 케이스에 주변 중괄호를 사용하지 마십시오.


답변

중괄호 포함.

switch 문에 잘못 될 수있는 것들이 너무 많아서 가능한 한 피하려고합니다.

  1. 돌파구를 잊고 사건이 실패했습니다.
  2. 기본 케이스를 잊어 버려 분류되지 않은 조건을 포착하지 못함
  3. 우연히 case 문 사이에 변수를 재사용하거나 더 나쁜 것은 case 문간에 변수를 공유하는 변수에 영향을줍니다.

중괄호를 사용하는 것은 case 문 사이에 의도적이거나 우발적 인 변수 공유를 방지하는 한 가지 방법입니다.


답변

이 질문은 아마도 “논쟁 적”(BRACE WAR!)으로 마감 될 것입니다. 나는 실제로 케이스 이후의 중괄호를 좋아합니다. 나에게 그것은 추악한 스위치 구문이 나머지 언어 구조와 더 비슷하게 보입니다. (이 “케이스”에서 중괄호를 사용하는 것에 대한 패널티는 없습니다)


답변

변수 이름이 재사용되지 않기 때문에 중괄호를 생략 할 수 있습니다. 변수 이름을 재사용함으로써 동일한 유형의 새 변수를 선언한다고 가정합니다.

중괄호는 실제로 case실수 로 다른 s 에서 동일한 변수를 재사용하지 않도록하는 데 가장 유용합니다 . 오늘은 변수를 선언하지 않지만 누군가 내일 변수를 추가 할 것이며 중괄호없이 코드는 오류가 발생하기 쉽습니다.


답변

스위치 케이스에는 중괄호를 사용하지 않습니다.

  • switch 문은 이미 중괄호없이 바로크처럼 보입니다.

  • 스위치 케이스는 매우 짧아야합니다. 변수를 선언해야 할 때 잘못하고 있다는 신호입니다.

이제 500 개가 넘는 라인의 케이스를 전환하는 레거시 C 코드를 유지합니다.