이것은 값이 배열에 있는지 확인 하는 가장 보편적 인 방법입니다 .
for (int x : array)
{
if (x == value)
return true;
}
return false;
그러나 Wirth 또는 Dijkstra가 몇 년 전에 읽은 책 에서이 스타일이 더 좋다고 말했습니다 (출구가있는 while 루프와 비교할 때).
int i = 0;
while (i < array.length && array[i] != value)
i++;
return i < array.length;
이런 식으로 추가 종료 조건이 루프 불변의 명시 적 부분이되고 숨겨진 조건이없고 루프 내부에서 종료됩니다. 모든 것이보다 명확하고 구조화 된 프로그래밍 방식입니다. 나는 일반적으로 가능할 때마다이 후자의 패턴을 선호했고 for
-loop를 사용하여 에서까지만 반복 a
했다 b
.
그러나 첫 번째 버전이 덜 명확하다고 말할 수는 없습니다. 어쩌면 초보자에게는 최소한 더 명확하고 이해하기 쉽습니다. 그래서 나는 여전히 어느 쪽이 더 나은지 스스로에게 묻고 있습니다 .
어쩌면 누군가 방법 중 하나를 선호하는 좋은 근거를 제시 할 수 있습니까?
업데이트 : 이것은 여러 함수 반환 지점, 람다 또는 배열 자체에서 요소를 찾는 문제가 아닙니다. 단일 불평등보다 더 복잡한 불변량으로 루프를 작성하는 방법에 관한 것입니다.
업데이트 : 좋아, 나는 대답하고 의견을 말하는 사람들의 요점을 본다 : 나는 foreach 루프를 혼합했다. 여기서는 while 루프보다 훨씬 명확하고 읽기 쉽다. 나는 그렇게하지 않아야했다. 그러나 이것은 또한 흥미로운 질문입니다. foreach-loop와 여분의 조건, 또는 명시적인 루프 불변과 post-condition을 가진 while-loop를 그대로 두겠습니다. 조건과 종료 / 브레이크가있는 foreach-loop가이기는 것 같습니다. foreach-loop (연결된 목록)없이 추가 질문을 작성합니다.
collection.contains(foo)