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



Answers

@rajesh가 말했듯이, 본문이 단일 문장 인 경우 중괄호는 선택 사항입니다.

그런 말로하면, 단일 문장의 경우에도 중괄호를 남겨 두는 것은 나중에 코딩을 변경할 때 오류가 발생할 가능성이 적기 때문에 (또는 이후에 오는 프로그래머가) 코딩 스타일에 의해 권장됩니다.

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

두 번째 인 " Tricked you "는 실제로는 if 있지 않습니다. 들여 쓰기 때문에 그냥 보입니다.

그러나 이는 보편적으로 받아 들여지지 않는 스타일 포인트 일뿐입니다. 유능한 프로그래머는 두 가지 형식을 모두 읽을 수 있어야합니다.

Question

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

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

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

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

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




이것은 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("pie".equals("pie"))
    System.out.println("Hurrah!");

추가 코드 줄을 추가하려면 중괄호를 추가해야합니다.

if("pie".equals("pie")) {
    log.debug("I am here!");
    System.out.println("Hurrah!");
}

그것들이 이미 있다면, 커서를 줄 끝으로 놓고 return 키를 누르고 새 코드를 추가하기 만하면됩니다.

단일 행의 경우 기술적으로 차이는 없지만 항상 많은 코드 규칙을 제안하거나 심지어 위임해야합니다. 그것에 대한 CheckStyle 규칙 조차 있습니다.




단일 진술에 문제가 없다.

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

2 개 이상의 문장에 대해서는, 괄호가 필요한 경우

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

또한 == 대신 비교를 위해 .equals ()를 사용하십시오.




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




내 두 센트. 중괄호없이 if 문 뒤에 두 줄을 쓰는 것은 본 적이없는 실수입니다. 즉, 함께 일하는 사람들은 당신이 여기서 당기는 마술을 이해하지 못하는 뼈 머리입니다. 개인 코드에 대해 재미있는 것을 저장하고 전문 및 교실 설정에서 들었던 것을하십시오.

발생할 수있는 합리적인 문제를 보여주는 실제 인수가 하나 있습니다. 아시다시피 모든 들여 쓰기와 추가 공백은 파싱 될 때 코드에서 제거됩니다. 여러 개의 한 행 else 문 뒤에 한 행 else 문을 사용하려고하면 문제가 발생할 수 있습니다. 예 :

if("cherry".equals("cherry"))
    if("pie".equals("pie"))
        System.out.println("Hurrah!");
else
    System.out.println("Rats!");

구별 할 수 없게된다.

if("cherry".equals("cherry"))
    if("pie".equals("pie"))
        System.out.println("Hurrah!");
    else
        System.out.println("Rats!");

이 상황에서도 자동 탭 설정을 통해 else 가 가리키는 if 문을 표시해야하지만, 자주하는 것처럼 규칙을 치뤄야 할 때주의해야합니다.




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

if (someCondition) 
    // do something 

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

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

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




중괄호는 조건에서 코드 묶음을 실행하려는 경우에만 사용됩니다. 중괄호를 사용하지 않으면 조건 뒤에 첫 번째 명령문 만 실행합니다. 나머지 행 (첫 번째 명령문 아래)은 if 부분으로 간주되지 않습니다.




Links