If、IIf() および If()
-
09-06-2019 - |
質問
最近質問したのですが、 IIf vs.もし そして、VBには別の関数があることを発見しました。 もし 基本的には以下と同じことをします IIf しかしショートです。
これはありますか もし 関数のパフォーマンスがより優れています IIf 関数?しますか? もし ステートメントは もし そして IIf 機能?
解決
くそー、ずっとオペレーターのこと言ってるのかと思ってた。;-) ともかく …
この If 関数は IIf 関数よりもパフォーマンスが優れていますか?
絶対に。それは言語に組み込まれているということを忘れないでください。2 つの条件引数のうち 1 つだけを評価する必要があるため、コストのかかる操作が節約される可能性があります。
If ステートメントは If 関数や IIf 関数よりも優先されますか?
やっていることが違うので比較はできないと思います。コードが意味的に割り当てを実行する場合は、意思決定ではなく、これを強調する必要があります。使用 If
ここではステートメントの代わりに演算子を使用します。これは、変数の初期化で使用できる場合に特に当てはまります。これを使用しない場合、変数はデフォルトで初期化され、コードが遅くなります。
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
他のヒント
非常に重要な違いが 1 つあります IIf()
そして If()
それは一緒ですか Option Infer On
後者は、特定の場合に結果を同じデータ型に暗黙的にキャストします。 IIf
戻ります Object
.
例:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
出力:
iifVal
値は Nothing、タイプは Object です
ifVal
値は 0 で、タイプは Integer です。つまり、暗黙的に Nothing を Integer に変換します。