引き続き、居候のStreetw☆がお送りします。
今回は最終回です。 最終回ではとうとうあの二人が(ry。
これまでのエントリ
まあまあ厳しくして欲しい (1/3) ~Option Strict SortOfって?~
まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~
では、Option Strict に関する理解を私なりに深めてみようとがんばってみました。
またまたリンク貼らせてもらいますが、今回は
「Option Strict Onをはやらせようとするのはやめておけ2」~中様のブログ~
に素直に従って、「まあまあ厳しくして欲しい 」と願うようになる場面について考えようと思います。
#最後まで読んでいただけるとわかりますが、選ばせていただいた場面は強敵で歯が立ちませんでしたorz
ここで「青いヤツ」(Visual Basic 2008 のことw)の登場です。
さらに今回は中さんのサンプルコードも拝借させてもらいます。(強敵なのw)
Dim a() = {New With {.Name = "A", .Age = 31}, New With {.Name = "A", .Age = 31}}
Dim f = From g In a Where g.Age > 20 Select New With {g.Name}
中さんも書かれてる通り、このコードは Option Strict On ではエラーになります。
ここで Option Strict Off としてしまわずに、「Option Strict まあまあ」の出番となります!!
厳しくできるところは厳しくしておきたいので、まず Option Strict On の状態から始め、エラーになる条件を少しずつ"警告"に変更していくことで「まあまあ」度合いを探ってみたいと思います。
っと、その前に、Visual Basic 2008 では新機能の Option Infer On(デフォルト)による型推論が行われるため、前回書いたような
Dim test = 1
というコードはエラーにはならなくなってます。これは右側から test の型が Integer と推論されるので、
Dim test As Integer = 1
に翻訳されるからです。つまりこの場合は "As" は省略されていないことになるので、エラーにはならないのです。
Visual Basic 2008 で "As" を省略したときに「暗黙的な型です。オブジェクトと見なされます。」に関する警告やエラーが発生するのは、型推論が行えなかった場合に限られることになるんだと思います。
話を戻しますね。
「Option Strict On」の状態でコンパイルしたところ、次の2つのエラーが発生しました。
- Option Strict On では、すべての変数宣言に 'As' 句が必要です。
- Option Strict On では、遅延バインディングを使用できません。
つい先ほど 'As' のエラーは出にくそうなことを書いたのに、早速エラーになってますorz
これは以前にとりこびとさんのエントリ
「Visual Basic 9.0 って、どんなんかーなぁー♪ その2。- Object and Array Initializers -」
でも書かれてましたけど、Visual Basic 2008 ではこの場合には型推論が機能しないようなのです。
仕方がないので「暗黙的な型です。オブジェクトと見なされます。」の「通知」を"警告"に落とします。
同様に「遅延バインディングです。実行時の呼び出しに失敗する可能性があります。」も"警告"にします。
こちらは、ソース上の変数 a が Object 型になるのに伴い変数 g も Object 型なので、g.Name などが遅延にあたるんだと思います。
さてこれで大丈夫☆、って思ったのに、実行するとまたエラーが...orz
- 'Object' から 'Boolean' への暗黙的な変換です。
これが Where 句の「g.Age > 20」のところで発生するようになりました。
なぜ「'Object' から 'Boolean'」?と思いつつ、仕方がないので「暗黙的な変換」も"警告"
にします。
・・・ということで、ついにすべてが"警告"になってしまいましたorz
あの~、、このシリーズでは、どれかはエラーのままにしておけることを狙ってたんですけど、思惑が。。。
そんな訳で「まあまあ厳しくして欲しい」と思わず思っちゃったりするのは無理でした(最悪な結末です(TーT)
・・・っと、ここまでの内容をとりこびとさんに少しだけ見て頂きましたところ、なんとっ、
ただ、Option Strict On ベースで遅延バインディングに関するエラーをなくしたい(Office連携などで)って話は少なからずあると思うのでとてもいい情報なんじゃないかな♪byとりこびとさん
というスバラシイお言葉を頂きました。落ち込んでたので感動です~(涙目
そうなんですよ!わたしもそれが言いたかったんです!!!(絶対違w
Visual Basic をお使いの皆様っ、こんな感じでそれぞれご自分にあった「まあまあ」を見つけてみてはいかがでしょうか♪♪♪
ということで、最後はどうなるかと思いましたが、とりこびとさんのおかげで無事にシリーズを終えることができそうです。
最後までお読みいただきましてありがとうございました。
#もしここだけ読んだのでしたら、最初っから読んでくださいねw
最後になってしまいましたが、この場をご提供いただきましたとりこびとさん、ありがとうございました!
そしてこんな形での参加を許していただきました中さんにもとっても感謝です!
では~