最近、 IIf と Ifについて質問したところ、VB にはIfと呼ばれる別の関数があり、基本的にIIfと同じことを行いますが、ショート サーキットであることがわかりました。
このIf関数はIIf関数よりも優れたパフォーマンスを発揮しますか? IfステートメントはIfおよびIIf関数よりも優先されますか?
最近、 IIf と Ifについて質問したところ、VB にはIfと呼ばれる別の関数があり、基本的にIIfと同じことを行いますが、ショート サーキットであることがわかりました。
このIf関数はIIf関数よりも優れたパフォーマンスを発揮しますか? IfステートメントはIfおよびIIf関数よりも優先されますか?
くそー、私はあなたがずっとオペレーターについて話していると思っていました。;-)とにかく…</p>
この 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
IIf()
との間の非常に重要な違いの 1 つIf()
は、後者では、 whereが を返す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 の型を持ちます。b/c 暗黙的に Nothing を Integer に変換しています。