[Java] 자바의 If 문에서 중괄호를 제거하는 데 차이가 있습니까?


Answers

아니, 절대적으로 차이가 없습니다 : 한 쌍의 중괄호는 여러 문장을 하나의 문장으로 만듭니다. while , for , for , 등등이 단일 진술을 기대한다면; 하나의 명령문 만 지키려면 중괄호가 필요하지 않습니다.

그러나 많은 소프트웨어 상점에서는 단일 문장에 대해서도 중괄호를 사용하는 것을 주장합니다. 그 이유는 다음과 같습니다.

if (x > 20)
    x -= 7;
    y -= 8;

위의 설명은 오도 된 것입니다. 들여 쓰기는 두 과제가 모두 보호되고 실제로는 첫 번째 과제 만 보호된다고 생각하게합니다. 그 이유는 Java의 공백이 중요하지 않기 때문입니다. 문장을 들여 쓰기가 프로그램의 전체 흐름에서 배치의 위치를 ​​변경하지 않습니다. 위와 같은 오류는 찾기가 매우 어려우므로 처음부터이를 방지하는 규칙을 채택하는 것이 좋습니다.

Question

기본 자바에 대한 뉴 보스톤 튜토리얼을 보면서, 그는 우리가 if 문을 이렇게하도록 가르쳐줍니다. (중괄호에주의하십시오)

if("pie"== "pie"){
    System.out.println("Hurrah!");
}

그래서 중괄호 제거를 시도했습니다.

if("pie"== "pie")
    System.out.println("Hurrah!");

그리고 그것은 여전히 ​​작동합니다! 내가 자바를 처음 접했을 때 나는 왜 그것이 작동하는지 모른다. 그리고 중괄호 제거 (또는 추가)가 장점 / 단점을 제공하는지 알고 싶습니다.




문장의 수가 1과 같으면 똑같습니다. 둘 이상인 경우 {} 구문이 필요합니다.




아니요. 나중에 코드를 편집 할 때 실제 위험이 발생합니다. 다음과 같이 편집하는 것은 비교적 쉽습니다.

if (someCondition) 
    // do something 

if (someCondition) 
    // do something
    // do something else important

someCondition이 true 일 때만 '다른 중요한 작업 수행'이 실행될 것이라고 생각합니다. 들여 쓰기가 오해 :-)

브래킷을 사용하면 이러한 위험이 없습니다.




그것은 단점이 있습니다. 지금까지 언급 한 답변이 맞습니다. 그러나 사물의 보안 관점에서 볼 때 몇 가지 단점이 있습니다. 지급 팀에서 일하면서 보안은 그러한 결정을 내리는 훨씬 더 강력한 요소입니다. 다음과 같은 코드가 있다고 가정 해 보겠습니다.

if( "Prod".equals(stage) )
  callBankFunction ( creditCardInput )
else
  callMockBankFunction ( creditCardInput )

이제는 내부 문제로 인해이 코드가 작동하지 않는다고 가정 해 보겠습니다. 입력을 확인하고 싶습니다. 따라서 다음과 같이 변경하십시오.

if( "Prod".equals(stage) )
  callBankFunction ( creditCardInput )
else
  callMockBankFunction ( creditCardInput )
  Logger.log( creditCardInput )

문제를 해결하고이 코드를 배포한다고 가정 해 봅시다 (그리고 아마도 검토 자 및 'Prod'조건에 있지 않기 때문에 문제가 발생하지 않을 것이라고 생각할 수 있습니다). 이제 생산 로그에 로그를 볼 수있는 모든 직원이 볼 수있는 고객 신용 카드 정보가 인쇄됩니다. 하나님께서는 (악의적 인 의도로)이 데이터를 얻는 것을 금지합니다.

따라서 중괄호를 제공하지 않고 부주의하게 코딩하면 보안 정보가 파손될 수 있습니다. 또한 CERT - Software Engineering Institure, CMU에 의해 Java의 취약점으로 분류됩니다.




아니요, if 에 대한 응답으로 하나의 진술만으로는 차이가 없습니다. if 에 대한 응답으로 두 번째 명령문을 추가하려면 중괄호가 필요합니다.




이것은 Java, C ++, C 및 C #을 포함한 많은 언어에 적용되는 스타일 문제입니다.

코드 블록에 한 줄만 있으면 중괄호를 생략 할 수 있습니다. 이것은 모든 제어 구조에 적용됩니다. if, while, for, do-while.

예를 들어 아래의 두 루프는 동일합니다.

for(int i=0; i<100; i++)
  doSomething(i);



for(int i=0; i<100; i++) {
  doSomething(i);
}

{} 생략의 장점 : 코드가 더 짧아 질 수 있습니다. 어떤 사람들은 그것이 더 가독하다고 생각할 수도 있습니다.

{}을 생략하는 단점 : 나중에 코드를 수정하고 코드 블록에 다른 행을 추가해야하는 경우 {} 을 추가하는 것이 좋습니다. 그렇지 않다면 아래 코드를 작성하십시오.

for(int i=0; i<100; i++)
  doSomething(i);
  doSomethingElse(i);

이것은 다음과 같습니다.

for(int i=0; i<100; i++) {
  doSomething(i);
}
doSomethingElse(i);



if 조건 뒤에 단 하나의 명령문 만 있으면 잘 작동합니다.

if("pie"== "pie")
    System.out.println("Hurrah!");
    System.out.println("second statement");// this will not print

하지만 여기에 두 문장 모두 인쇄됩니다.

if("pie"== "pie")
{
System.out.println("Hurrah!");
System.out.println("second statement");
}

나는 한 문장을 인쇄하고 싶을지라도 아래처럼 사용할 것을 제안합니다.

if("pie".equals("pie"))
   {
       System.out.println("Hurrah!");
       System.out.println("second statement");
   }