ときどき、このようなループに遭遇します。コードの繰り返しを回避し、最も読みやすくするために、どのように構造化すべきかわかりません。
この例では 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.
}
// ...
(もちろん、このコードの繰り返しは簡単で小さいものですが、これは単なる例です。)
ループを最初に実行する前に条件をチェックする必要があるため、do...while ループにすることはできません。このようなコードを書く最良の方法は何ですか?