If 演算子でワンライナー
関数型言語を勉強していると、普段メインで使用している VB.NET が如何に長ったらしいかと思い知らされます。パターンマッチにパイプラインにバナナクリップが使いたくなる 2011。
IIf 関数
互換のため、VB.NET にも IIf 関数が存在します。単純な条件分岐を 1 行で書くことができるのですが、Option Strict On をコーディング規約で強制させられていると、必ず型変換が必要になり、これだったら使用しないほうがいいような気になってきます*1。
Dim value As Integer = Convert.ToInt32(IIf(message = "Odd", 1, 0))
If 演算子
VS2008 より、新しく If 演算子が追加されました。今更感バリバリ最強No.1ですが。If 演算子はコンパイラが型を判定してくれるので、型変換しなくてもよく、非常にすっきりとしたコードを書くことができます。
Dim value As Integer = If(message = "Odd", 1, 0)
評価方法も変更された
IIf 関数では、TruePart(真の場合に返されるオブジェクト) と、FalsePart(偽の場合に返されるオブジェクト)の両方を、結果に関わらず評価します。そのため、次のコードでは例外が発生してしまいます。
// edamameshiba が Nothing でも Name が呼ばれてしまう Dim str As String = IIf(edamameshiba IsNot Nothing, edamameshiba.Name, "Nothing").ToString()
うーん使いづらい。If 演算子はこのあたりも改善されていて、真の場合には TruePart、偽の場合には FalsePart のみを評価します。
Dim str As String = If(edamameshiba IsNot Nothing, edamameshiba.Name, "Nothing")
短いコードっていいなぁと思う今日この頃です。
ショートコードテクニックを磨きたい
この本が非常に気になっています。メインは VB.NET ですが、参考になる部分は多いのではないかと。ただ型推論に関しては、VB.NET では無闇に使用しないほうがいいかなぁ……。
*1:CInt なら短くすみますが、VisualBasic 名前空間はできるだけ使わないほうがよいと思っている派。