2
때때로이 코드와 같은 루프를 실행합니다. 코드 반복을 피하고 가장 잘 읽을 수 있도록 구조가 어떻게되어야하는지 잘 모르겠습니다.이 루프를 어떻게 구성해야합니까?
이 예제에서는 C#으로 작성하고 Unity3d 엔진을 사용하지만이 질문은 일반적으로 루프에 관한 것이며 여기에 C#/Unity3d에 대한 구체적인 내용은 없으므로 나에게도 보일 것입니다.
// ...
Vector3 rayPosition = transform.position;
Vector3 rayDirection = transform.forward;
RaycastHit hit;
Vector3 rayFinish = rayPosition + rayDirection * rangeLeft; // This line repeats...
while (Physics.Linecast (rayPosition, rayFinish, out hit)) {
rangeLeft -= hit.distance;
rayPosition = hit.point;
rayDirection = Vector3.Reflect(rayDirection, hit.normal);
rayFinish = rayPosition + rayDirection * rangeLeft; // ...here.
}
// ...
(물론, 반복이 코드는 사소한 작은이지만, 그냥 예입니다.)
그것은 루프, 조건이 필요하기 때문에 동안 ... 할 일에 그것을 만들 수는 없습니다 루프를 처음 실행하기 전에 확인해야합니다. 이런 식으로 코드를 작성하는 가장 좋은 방법은 무엇입니까?
사실, 난 전에 첫 번째 변종이 있고, 다음이로 리팩토링. 루프가 아닌가 (사실) 항상 나쁜 연습으로 간주됩니까? 두 번째 코드 중복을 피할 수는 있지만 제 의견으로는 읽기 쉽지 않습니다. 코드를 최소한 두 번 스캔하면 코드가 무엇을하는지 이해해야합니다. –
@ golergka : 버전 2가 더 읽기 쉽다고 생각하는 이유는 (true)는 피해야한다는 데 동의합니다. 나는 그 의도를 조금 더 명백하게 (IMO)하기 위해 편집했지만, 여전히 훌륭하지는 않다. 근본적인 문제는 루프 본문의 중간에서 필요한 계산과 루프 조건으로 반환 값을 모두 사용하기 위해 하나의 호출을 사용하려는 것입니다. 루프 조건은 처음이나 마지막에만 올 수 있으므로 값을 저장하고 while 조건에서 사용하거나 루프 중간에서 벗어날 수있는 옵션 이외의 옵션은 표시되지 않습니다. 또는 goto를 사용하십시오 ... –