0

次のような if ステートメントがあります。

If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then

のがこんなに多いAndAlsoのはまずいのではないかと思います。何が起こっているのかを理解するのは混乱するだけです。このテストをより簡単な方法で行う方法はありますか? それともこれが正しいやり方ですか?

4

3 に答える 3

2

私の知る限り、MSDN のドキュメントには、Ifステートメントで使用できる条件の最大数については何も書かれていません。そのため、制限はおそらく利用可能なスタック スペースによって決まり、それに近づくことはまずありません。

練習に関しては、コーディング用語では悪くありませんが、あなたが言うように、読みにくくなる可能性があります。私は個人的に、そのようなステートメントを読みやすくするために行継続を使用する傾向があります。

If r1.Left < r2.Right _
    AndAlso r2.Right < r1.Right _
    AndAlso r2.Top + r2.Height > r1.Top Then
于 2012-07-26T11:30:37.170 に答える
1

読みやすさを向上させるために、いつでも新しい変数またはメソッドを導入できます。

だから代わりに

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 ...
于 2012-07-26T11:19:28.380 に答える
0

if ステートメントで使用できる演算子の数に制限はありません。さらに、(プログラマーの観点からは)好きなだけ使用してもまったく問題ありません。結局のところ、これが if ステートメントの目的です。ただし、あまりにも多くの演算子をチェックする必要がある状況に直面している場合は、別のアプローチを検討する必要があります。

あなたの特定の例では、使用しているコードには AndAlso 演算子が 2 つしか含まれていませんが、これはプログラムにとって大きなオーバーヘッドではありません。プログラムの 1 か所だけでこの状態をチェックする場合は、このアプローチが正しいと見なすことができます。このチェックを多くの場所で行う必要がある場合は、そのための関数を BigYellowCactus のように記述するのが賢明です。提案します。

お役に立てれば...

于 2012-07-26T11:58:41.363 に答える