次のような if ステートメントがあります。
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
のがこんなに多いAndAlso
のはまずいのではないかと思います。何が起こっているのかを理解するのは混乱するだけです。このテストをより簡単な方法で行う方法はありますか? それともこれが正しいやり方ですか?
次のような if ステートメントがあります。
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
のがこんなに多いAndAlso
のはまずいのではないかと思います。何が起こっているのかを理解するのは混乱するだけです。このテストをより簡単な方法で行う方法はありますか? それともこれが正しいやり方ですか?
私の知る限り、MSDN のドキュメントには、If
ステートメントで使用できる条件の最大数については何も書かれていません。そのため、制限はおそらく利用可能なスタック スペースによって決まり、それに近づくことはまずありません。
練習に関しては、コーディング用語では悪くありませんが、あなたが言うように、読みにくくなる可能性があります。私は個人的に、そのようなステートメントを読みやすくするために行継続を使用する傾向があります。
If r1.Left < r2.Right _
AndAlso r2.Right < r1.Right _
AndAlso r2.Top + r2.Height > r1.Top Then
読みやすさを向上させるために、いつでも新しい変数またはメソッドを導入できます。
だから代わりに
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
何かのようなもの
Function RectIsInsideOf(r1 As ..., r2 As ...) As Bool
Return r1.Left < r2.Right AndAlso
r2.Right < r1.Right AndAlso
r2.Top + r2.Height > r1.Top
End Function
...
If RectIsInsideOf(r1, r2) Then ...
if ステートメントで使用できる演算子の数に制限はありません。さらに、(プログラマーの観点からは)好きなだけ使用してもまったく問題ありません。結局のところ、これが if ステートメントの目的です。ただし、あまりにも多くの演算子をチェックする必要がある状況に直面している場合は、別のアプローチを検討する必要があります。
あなたの特定の例では、使用しているコードには AndAlso 演算子が 2 つしか含まれていませんが、これはプログラムにとって大きなオーバーヘッドではありません。プログラムの 1 か所だけでこの状態をチェックする場合は、このアプローチが正しいと見なすことができます。このチェックを多くの場所で行う必要がある場合は、そのための関数を BigYellowCactus のように記述するのが賢明です。提案します。
お役に立てれば...