나는 For와 While 문에 이름을 줄 수 있다는 것을 발견했다. 특정 루프를 중단하거나 계속하려면이 기능이 유용하다는 것을 알고 있습니다.
하지만 왜 If에 이름을 부여해야합니까 ?? ?? 이 문제If Statement에 이름을 지정해야하는 이유는 무엇입니까?
답변
이름이있는 코드 블록이있는 경우 break를 사용하여 종료 할 수 있습니다. 즉, 블록 이름 지정에 사용했던 코드 블록을 사용할 수 있습니다. 그것도없이 작동
name: if(true) { // do something if(/* condition */) { break name; } // do more }
는 IF :
name: { // do something if(/* condition */) { break name; } // do more }
이 몇 가지 논리에 가드 조건의 집합, 그리고 아래로 떨어진 것이다 논리의 또 다른 세트가있을 때 내 작품에 등장 경비원의 결과에 관계없이
다른 구조 읽고 수정하기가 더 어렵 또 다른 예 : 보통 내가 베어 블록 아닌 경우를 사용하지만
block: if(/* guard */) { // prep work if(/* guard */) { break block; } // prep work if(/* guard */) { break block; } // real work }
.
+1 결코 전에 본적이 없습니다. 비록 당신이 다른 블록에서 과거를 깨고 싶은 코드를 넣지 않더라도 같은 결과를 얻는가? 어떤 경우에는 –
이지만 양식 (가드, 계산, 가드, 계산, 가드, 워크)은이 방법을 훨씬 쉽게 읽을 수 있습니다. –
저는 개인적으로 여전히 if-else 구조를 선호한다고 생각하지만 지금은 새로운 것을 배웠습니다 :-). –
당신은 어떤 문 블록 전에 레이블을 사용할 수없는
name: if(true){
//do something
}
이 컴파일 쓸모 보인다. 이것은 아마도 루프에 가장 일반적으로 사용되지만 다른 곳에서는 완벽하게 유효합니다.
+1, 답을 추가하려면이 링크에 몇 가지 예가 있습니다. http://download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html –
mmm ok하지만 내 질문에 답할 수 없습니다. D는 if라는 이름을 붙일 실제적인 용도가 있습니까? – Oneiros
Sarah Happy의 대답은 루프 이외에 코드 블록을 깨는 데 break
을 사용할 수 있다는 것을 보여줌으로써 실제로 내 것보다 정확하므로 대답을 살펴 보시기 바랍니다. 실제로 당신이 말한 바와 같이 label입니다
는 대한과 루프 동안이다. 그것은 다른 곳에 유효하지만 난 당신이 하지 사용할 수있는 추가 할
goto name;
goto
이 예약어 인 반면, 자바 하지 지원 고토 않지만, 라벨의이 형태를 지원합니다 break
및 continue
과 결합 된 루프. 당신이 당신의 레이블 continue
를 사용하려고하는 경우, 또는 두 illegal start of expression
및 not a statement
말,
name: if(true){
//do something
}
goto name;
당신이 오류를 얻을 것 : 당신은 같은 고토를 포함하는 코드 샘플을 확장하는 경우
하지만 루프 않고, 같은 :
name: if(true){
//do something
}
continue name;
당신은 undefined label: name
컴파일러 측면에서 루프가없는 레이블은 괜찮습니다.하지만 루프가 없으면 무의미합니다.
루프를 깨는 것처럼 뒤로 또는 if 문으로 건너 뛰기를 원할 수 있습니다. 이 문제에 대해 생각할 때마다 새로운 방법을 만드는 방법을 찾아보십시오.
- 1. SqlDataAdaptor가 두 번 테이블을 지정해야하는 이유는 무엇입니까?
- 2. 정적 링크에서 주소를 지정해야하는 이유는 무엇입니까?
- 3. 새 변수에 복제를 지정해야하는 이유는 무엇입니까?
- 4. C#에서 "out"키워드를 지정해야하는 이유는 무엇입니까?
- 5. ActionMailer로 템플릿을 렌더링하기 위해 텍스트 포맷을 지정해야하는 이유는 무엇입니까?
- 6. IF 존재하지 않는 이유는 무엇입니까?
- 7. <persistence-unit> 요소 내부에서 클래스를 지정해야하는 이유는 무엇입니까?
- 8. 동일한 종속성에 대해 '런타임'과 '컴파일'을 모두 지정해야하는 이유는 무엇입니까?
- 9. postgresql : psql을 실행할 때 -h localhost를 지정해야하는 이유는 무엇입니까?
- 10. ACTION_PACKAGE_ADDED 인 텐트 필터에 스키마를 지정해야하는 이유는 무엇입니까?
- 11. 모든 제네릭 형식 매개 변수를 지정해야하는 이유는 무엇입니까?
- 12. if 문이 내 조건을 무시하는 이유는 무엇입니까?
- 13. if 문이 실행되지 않는 이유는 무엇입니까?
- 14. if 조건이 jquery에서 작동하지 않는 이유는 무엇입니까?
- 15. If 문을 사용하여 변수가 변경되는 이유는 무엇입니까?
- 16. PHP mysqli prepared statement에 배열로 데이터 첨부하기
- 17. 사용자 이름을 변경하지 않는 이유는 무엇입니까?
- 18. ClassCastException이 클래스 이름을 표시하지 않는 이유는 무엇입니까?
- 19. Spring JDBC에서, statement에 RESULT SET HOLDABILITY를 설정하는 방법은 무엇입니까?
- 20. Nhibernate QueryOver - JoinQueryOver를 지정해야하는 이유
- 21. 테이블의 열 길이를 지정해야하는 이유
- 22. 유형 T가 인스턴스화가 필요한 경우 일반 클래스 서명에서 new()를 지정해야하는 이유는 무엇입니까?
- 23. F # : 인수를 사용하지 않는 함수에 '단위'를 명시 적으로 지정해야하는 이유는 무엇입니까?
- 24. SQL "GROUP BY"절의 모든 열을 명시 적으로 지정해야하는 이유 - "GROUP BY *"가 아닌 이유는 무엇입니까?
- 25. #if 1 C 전처리 지시어를 사용하는 이유는 무엇입니까?
- 26. 내 코드가 true if-condition을 무시하는 이유는 무엇입니까?
- 27. 두 개의 if 문 중 하나가 실행되지 않는 이유는 무엇입니까?
- 28. "if (p.exitValue()! = 0)"코드가 두 번 실행되는 이유는 무엇입니까?
- 29. Perl : if 문이 "and"보다 느린 이유는 무엇입니까? 펄
- 30. return 키워드가 'if block'에서 문제를 일으키는 이유는 무엇입니까?
제발 제발! 이 패턴을 사용하지 마십시오! 이 같은 고토 나쁜입니다! – Tazzy531