3

IIfoverを使用することにはパフォーマンス上の利点がありIfますか?

単にコードが少ないこと以外は...違いは何ですか:

If msInitialFloodSection <> Trim$(cboFloodSection.Text) Then
    mbFloodSectionChanged = True
Else
    mbFloodSectionChanged = False
End If

mbFloodSectionChanged = IIf(msInitialFloodSection <> Trim$(cboFloodSection.Text), True, False)
4

1 に答える 1

14

IIfは演算子や言語構造ではなく、。などの他の関数と同じように関数Leftです。したがって、常にすべての引数を評価しIfますが、使用すると正しいブランチのみを評価します。

例:

denominator = 0
value = IIf(denominator = 0, 0, value / denominator)

これによりDivizion by zero、分母がゼロの別の分岐が存在するにもかかわらず、エラーが発生します。

パフォーマンスに関しては、値をVariantにパックすることで、追加のティックが必要になりますが、パフォーマンスを向上Ifさせる場合は、Variantを介して物事を強制しないため、より高速になります。 2つではなく、1つの値のみを計算します。

于 2012-10-24T13:56:48.300 に答える