2013-08-10 3 views
13

효과적인 Java와는 약간의 충돌이 있습니다. 한편으로는 최종 수식어를 사용하도록 강력히 권장합니다. 또한 foreach 루프를 사용하도록 권장합니다. 요소가 마지막이 좋은 것으로 보인다 사용 후 변화가 예상되지 않는 경우각 루프마다 a를 사용하십시오.

for (final element e : list) { 
    // do whatever. 
} 

:

그러나이 같은 어떤 코드, 어디 코드의 조각을 보지 못했다. 왜 그렇게 일반적이지 않은가?

+1

항상 사용하고 있습니다. 다른 사람들은 '코드가 혼란 스럽다'고 말하기 때문에 그것을 사용하지 않습니다. 이러한 유형의 루프를 'Enhanced for-loop'라고합니다. – Obicere

+0

나는 그것을 항상 사용합니다. 그러나 저는 두 진영 모두에 동의하는 경향이 있습니다. 참조를 다시 할당하지 않으려면 '최종'기간을 사용하십시오. 하지만 실제로 코드를 많이 복잡하게 만듭니다. * 좋은 방법으로 작성된 많은 양의 코드를 보았지만 불행하게도 지나치게 길게 보입니다. 불행히도 스칼라로 이동할 준비가되어 있지 않는 한 두 캠프를 모두 기쁘게 할 수있는 간단한 것은 없습니다 ...;) –

답변

5

"코드 잡음"때문에 사용되지 않습니다.

최종 키워드는 모든 메서드 매개 변수 등에 사용되어야하지만 더 정확하지는 않지만 읽기 쉽지 않기 때문에 중요하지 않습니다.

0

기본적으로 요소는 for-loop의 범위 내에서 최종적으로 사용됩니다. 그다지 얻을 수있는 것은 아닙니다.

+0

'Runnable'의 경우에 유용하며 덮어 쓰기로 인한 논리 오류를 방지하는 데 도움이됩니다 잘못된 변수. – chrylis

+0

특히 '최종'변수가 'for-each'루프 내에서 키로 사용되어 다른 스레드에서 동시에 쓸 수있는 컬렉션에 액세스하는 경우에 유용합니다. –

7

일반적으로 개발자는 기본값을 그대로두고 필요할 때만 코드를 추가합니다. 즉, 가장 짧은 코드를 작성하는 것이 더 쉽습니다. 강의실을 생각하면 무언가를하면 손을 들어야합니다. 그러지 않으면 손을 들어야합니다. 절반 정도는 전혀 투표하지 않습니다.

IMHO 기본값은 final이어야하며 변경할 수있는 값은 var입니다. 이 방법은 훨씬 더 많은 필드가 최종 것입니다.

이 특별한 경우 변수가 변경되었는지 여부를 판단 할 수있을만큼 메소드가 짧아야한다는 점에서 로컬 변수를 최종적으로 작성하지 않습니다. 쉽게 해결할 수 없다면 루프/방법이 너무 복잡합니다.

그러나 필드의 경우 가능한 한 항상이 코드를 사용하는 것이 좋습니다. 특히 개인 코드가 아닌 경우 esp를 사용하는 것이 좋습니다. 모든 코드를 쉽게 읽을 수 있습니다.

2

최종 키워드를 배치 할 수있는 곳이 많이 있습니다. 일반적인 예는 메소드 매개 변수입니다. 다음 코드 스 니펫을 살펴보십시오.

public static long pow_mod(final long base, final long exponent, final long mod) { 
    // body 
} 

80 줄 이후의 코드 줄을 끊는 데는 다른 규칙이 있습니다. 이 선언은 아직 들여 쓰기가되지 않았으며 (클래스 내에 있어야 함) 이미 그 양보다 길다. Java는 매우 장황한 언어이므로 코드를 더 복잡하게 만들 필요가 없습니다. 특히 로컬 변수를 최종적으로 얻는 것이므로 아무것도 필요하지 않습니다.

관련 문제