VB9でのIIF関数の取り扱い

IIFはVisual Basicの三項演算子でした。「でした」というのは、VB6までは演算子であったものの、.NETにプラットフォームが移ったVB7移行は下位互換性のための「関数」として用意されているからです。

VBの言語仕様策定者であるPaul Vick氏のサイトではVB9でのIIFの取り扱いについて、MS社内の開発チームで議論になっていることが書かれています。VB9ではLINQへの対応もあって現状のVB7/8よりも型推論が強化されているのですが、それも原因の一つとなってIIFの評価式で変数や式の型の評価をするときに二つ以上の型に判断が出来てしまう場合があり、場合によってはIIFの判定が失敗してしまう可能性があるため、その存在自体どうしようかと言うことのようです。

私個人としては三項演算子がネストされた場合に、コードがわかりにくくなり、バギーになり得るというだけで嫌いでほとんど使っていませんが、IIFが便利な物であるのは確かで、VBのコードではC言語でのそれ以上によく見かけます。したがって上のような問題があると、過去のコード資産を流用しようとした場合に問題になる場合が多くなると言うことになります。

ただ、このような判定という基本的な部分で問題があり、IIFの判定において失敗するパターンがほぼ予測不可能な場合にはVB9からIIFをいっそ削除してしまうのも一つの方法だと私は考えます。実行時までIIFが期待通りに動作するのかしないのかわからないようであるなら、コンパイル時に何らかのエラーが出てコンパイルを失敗させるか、下位互換性の維持のために現状のIIFを残すにしてもLv4以上のワーニングとして、開発者が意識的にワーニングレベルのビルド設定を変更しない限りコンパイルエラーとさせておくべきでしょう。

IIF, a True Ternary Operator and Backwards Compatibility – Panopticon Central

Interaction.IIf メソッド (Microsoft.VisualBasic) – msdnライブラリ

コメントを残す