引き続き、居候のStreetw☆がお送りします。
#とりこびとファンの方、ごめんなさい。
前回のエントリ
まあまあ厳しくして欲しい (1/3) ~Option Strict SortOfって?~
では、「Option Strict まあまあ SortOf」の紹介記事の紹介をさせてもらいました。
今回は Option Strict に関連する3つの条件
- 暗黙的な変換
- 遅延バインディングです。実行時の呼び出しに失敗する可能性があります。
- 暗黙的な型です。オブジェクトと見なされます。
のそれぞれの意味を調べていきたいと思います。
まずは Visual Basic プロジェクトのプロパティの「コンパイル」タブにある「条件」のところでF1ボタンを押してみます。
・・・ですが、開いたヘルプには各条件に関する説明は見あたりませんでした。orz
仕方ないので探し回っていると、ちょっと良さそうな次のヘルプが見つかりました。
MSDN:Visual Basic での警告の構成
早速読み始めたところ、Visual Basic コンパイラの警告を活用することの効果として
「すっきりとした優れたコードを作成できます」
と書かれていました。それって腕次第じゃない?ってツッコミを小さく入れつつ、読み進めますw
それから、Option Strict などの指定はコンパイルされるものではなく、コンパイラへのコマンド ライン オプションになるものなんだって新発見をしつつ 、さらに読み進めます。
すると中程以降に「警告の種類」というトピックがあり、関係のありそうな警告が ID 付きで書かれてました。
ここでネタ元
Option Strict [On|Off|SortOf] ~The Visual Basic Team 様のブログ~
に書かれてた .vbproj ファイルの や タグの話を思いだし、それらの値とコンパイルしたときの状況をまとめてみたのが次の表になります。
#当該条件以外は"警告"にして確認しています。
★暗黙的な変換
ソースの一例
Dim test As Double = "1" + 2.0R
コンパイル時
通知を"警告"にした場合 |
警告 1 'String' から 'Double' への暗黙的な変換です。 |
通知を"エラー"にした場合 |
エラー 1 'String' から 'Double' への暗黙的な変換です。 |
エラー 2 警告がエラーとして処理されました: 'String' から 'Double' への暗黙的な変換です。 |
「通知」の状態と、.vbproj ファイル内の と タグの値の関係
★遅延バインディングです。実行時の呼び出しに失敗する可能性があります。
ソースの一例
Dim test As Object = Button1
test.Focus()
コンパイル時
通知を"警告"にした場合 |
警告 1 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。 |
通知を"エラー"にした場合 |
エラー 1 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。 |
エラー 2 警告がエラーとして処理されました: 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。 |
「通知」の状態と、.vbproj ファイル内の と タグの値の関係
★暗黙的な型です。オブジェクトと見なされます。
ソースの一例
Dim test = 1
コンパイル時
通知を"警告"にした場合 |
警告 1 'As' 句のない変数です。Object の型と見なされます。 |
通知を"エラー"にした場合 |
エラー 1 'As' 句のない変数です。Object の型と見なされます。 |
エラー 2 警告がエラーとして処理されました: 'As' 句のない変数です。Object の型と見なされます。 |
「通知」の状態と、.vbproj ファイル内の と タグの値の関係
この結果からいくつかのことがわかりました。
- 私がわかりにくいと感じていた3つめの条件は、「警告の種類」ではより具体的な「宣言に 'As' 句が必要との警告」のことでした。エラーのメッセージもそんな感じですね。
- WarningsAsErrors って、まず警告のメッセージが出力され、次にそれがエラーとして扱われるという、まさに WarningsAsErrors な動作ですね。 /warnaserror コンパイラオプションのヘルプにも、この辺りのことが少し書かれていました。
- 「通知」が"警告"の場合には、どちらのタグにも値が設定されません。コンパイラって、オプションをな~んにも指定しないと、警告はぜ~んぶ出すのがデフォルトなんですね。それをオプションで抑制したりエラーにしたりと。
- 実際には「警告の種類」に書かれていたものより多くのIDが、1つの条件に含まれているようです。
すべてのエラーIDはここのツリーの下に書かれているみたいです。
MSDN:Visual Basic コンパイラ メッセージ
"Error ID: BC41999"みたいな値をググると、MSDNのヘルプのエラー内容に直接たどり着けそうです ♪♪
今回はこの辺りで終わりたいと思います。
長くなっちゃうので書けなかった今回の本題「それぞれの条件の詳細」については、各エラーIDのヘルプを各自で見ていただければと思います(ぉ
これで Option Strict に関係する現状の仕様の把握ができたと思うので、次回の最終回では、 ようやくシリーズの本題の「まあまあ厳しくして欲しい」と思わず思っちゃうような話ができればと思っています。
#今回は関連のありそうな情報が次から次へと見つかって、どれを書くべきかの取捨選択が大変でした~