VB 6 の一部のプロパティに対するこの正規表現は次のとおりです。
iif (integervariable, 0, 1)
もしそうなら、iifは論理比較なしで整数引数をどのように解決するのか知りたいですか?
それは正規表現ではなく、関数である関数呼び出しIIf
です。
VB では、ブール値のコンテキストで整数変数を使用できます。その場合、0
は に変換されFalse
、ゼロ以外は に変換されTrue
ます。
それがIIf
機能です。それについては、このドキュメントを確認してください。
通常、このプログラミング言語では、0 は forFalse
を表し、それ以外は を表しますTrue
。
いずれにせよ、「True と False の同等の数値に依存するコードを書くべきではありません。」(MSDN) 詳細については、「ブール型が数値型に正確に変換されない」を参照してください。
お役に立てれば。
GSerg と SysDragon には、いくつかの適切な回答があります。言及されていないことを1つだけ追加したかった:
次のような論理比較のない IIF または IF があるときはいつでも
IIf (integervariable, 0, 1)
また
If (integervariable) Then ...
との論理比較True
が暗示されます。そう
IIf (integervariable, 0, 1)
と同じです
IIf (CBool(integervariable) = True, 0, 1)
と
If (integervariable) Then ...
と同じです
If (CBool(integervariable) = True) Then ...
注意: SysDragon が述べたように、数値をブール値と比較するコードに依存しないでください。これが理由です:
Print IIF(CInt("123"), True, False)
はTrue
Print IIF(CBool("True"), True, False)
また〜だTrue
したがって、両方を比較すると、結果は True になると想定されます。しかし、実際には、
Print IIF(CInt("123") = CBool("True"), True, False)
として出てくるFalse
この例の教訓は、integervariable
が整数 (またはブール値以外のその他のデータ型) である場合、論理比較を行うことがベスト プラクティスであるということです。あなたの場合、代わりに代わりにIIf (integervariable, 0, 1)
使用してくださいIIf (integervariable <> 0, 0, 1)
。結果は同じで、予測不能な結果になる可能性はありません。