とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~

引き続き、居候の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 ファイル内の タグの値の関係

通知 NoWarn WarningsAsErrors
なし 41999, 42016
警告
エラー 41999, 42016

★遅延バインディングです。実行時の呼び出しに失敗する可能性があります。

ソースの一例

Dim test As Object = Button1 
test.Focus()

コンパイル時

通知を"警告"にした場合 警告  1  遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。
通知を"エラー"にした場合 エラー 1  遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。
エラー 2  警告がエラーとして処理されました: 遅延バインディングの解決です。ランタイム エラーが発生する可能性があります。

「通知」の状態と、.vbproj ファイル内の タグの値の関係

通知 NoWarn WarningsAsErrors
なし 42017,42018,42019,42032,42036
警告
エラー 42017,42018,42019,42032,42036

★暗黙的な型です。オブジェクトと見なされます。

ソースの一例

Dim test = 1

コンパイル時

通知を"警告"にした場合 警告  1  'As' 句のない変数です。Object の型と見なされます。
通知を"エラー"にした場合 エラー 1  'As' 句のない変数です。Object の型と見なされます。
エラー 2  警告がエラーとして処理されました: 'As' 句のない変数です。Object の型と見なされます。

「通知」の状態と、.vbproj ファイル内の タグの値の関係

通知 NoWarn WarningsAsErrors
なし 42020,42021,42022
警告
エラー 42020,42021,42022

この結果からいくつかのことがわかりました。

  • 私がわかりにくいと感じていた3つめの条件は、「警告の種類」ではより具体的な「宣言に 'As' 句が必要との警告」のことでした。エラーのメッセージもそんな感じですね。
  • WarningsAsErrors って、まず警告のメッセージが出力され、次にそれがエラーとして扱われるという、まさに WarningsAsErrors な動作ですね。 /warnaserror コンパイラオプションのヘルプにも、この辺りのことが少し書かれていました。
  • 「通知」が"警告"の場合には、どちらのタグにも値が設定されません。コンパイラって、オプションをな~んにも指定しないと、警告はぜ~んぶ出すのがデフォルトなんですね。それをオプションで抑制したりエラーにしたりと。
  • 実際には「警告の種類」に書かれていたものより多くのIDが、1つの条件に含まれているようです。
    すべてのエラーIDはここのツリーの下に書かれているみたいです。
    MSDN:Visual Basic コンパイラ メッセージ
    "Error ID: BC41999"みたいな値をググると、MSDNのヘルプのエラー内容に直接たどり着けそうです ♪♪

今回はこの辺りで終わりたいと思います。

長くなっちゃうので書けなかった今回の本題「それぞれの条件の詳細」については、各エラーIDのヘルプを各自で見ていただければと思います(ぉ

これで Option Strict に関係する現状の仕様の把握ができたと思うので、次回の最終回では、 ようやくシリーズの本題の「まあまあ厳しくして欲しい」と思わず思っちゃうような話ができればと思っています。
#今回は関連のありそうな情報が次から次へと見つかって、どれを書くべきかの取捨選択が大変でした~

投稿日時 : 2007年11月1日 18:05

Feedback

# re: イベントとデリゲート関連のエントリの途中ですが臨時ニュースをお伝えします。 2007/11/01 18:06 とりこびと ぶろぐ。

re: イベントとデリゲート関連のエントリの途中ですが臨時ニュースをお伝えします。

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/01 18:24 さかもと

最終回も楽しみにしてます。

# まあまあ厳しくして欲しい (3/3) ~現実は甘くない、けど楽しい~ 2007/11/01 18:33 とりこびと ぶろぐ。

まあまあ厳しくして欲しい (3/3) ~現実は甘くない、けど楽しい~

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/01 18:49 Streetw☆

>>さかもとさん、ありがとう。
>最終回も楽しみにしてます。
涙、涙ですよっ。って書こうと思ったら、もう最終回が始まりましたw

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/01 20:02 とりこびと

Option Strict On の条件から外れたもの = (カスタム)って表示されている場合
の.vbproj の中のOption Strict は Off になっているんですね。

Off ベースで警告をエラーにあげてるのね。

なるほどなるほど♪

# Thanx for Streetw☆さん 2007/11/01 20:37 とりこびと ぶろぐ。

Thanx for Streetw☆さん

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/01 23:47 Streetw☆

とりこびとさん、コメントありがとうございます。
って、感動~。
とりこびとさんの決めゼリフ、とりこびとさんに言い返せました!(表現変ですがw

> Off ベースで警告をエラーにあげてるのね
へぇ~、.vbproj内にもOptionStrictの指定ってあったんですね。

調べると、VisualBasicコンパイラオプションの /optionstrict のヘルプ<http://msdn2.microsoft.com/ja-jp/library/3wh7c190(VS.80).aspx>
には":custom"って指定があるんですけど、これとの関係ってどうなんでしょうね。
MsBuildのヘルプも追っかけてみたんですけど、そちらはたどり着くことさえできませんでしたorz

他に、ソースコード内に書いたOption Strictの指定と矛盾した場合のこととか、ネタ元の「we don't recommend manually editing」なことの実験とか、この(2/3)では書ききれなかったことがありました。

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/02 8:51 とりこびと

>他に、ソースコード内に書いたOption Strictの指定と矛盾した場合のこととか、ネタ元の「we don't recommend manually editing」なことの実験とか、この(2/3)では書ききれなかったことがありました。


そうそうここ!
今日試してみようと思ってたんです。昨日湯船の中でw

次はご自身のブログでエントリ・・・ですよね♪

# re: まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~ 2007/11/05 14:16 Streetw☆(遅

思ったときにしてしまわないと、後でってなかなかできないですね。。
片桐さんのDSLiteみたく、パソコンを(ry)してお風呂で(ry

# Option Strict と /nowarn、/warnaserror。その1。- まずはいろいろ確認事項をば - 2007/12/04 14:34 とりこらぼ。

Option Strict と /nowarn、/warnaserror。その1。- まずはいろいろ確認事項をば -

# まあまあ厳しくして欲しい (3/3) ~現実は甘くない、けど楽しい~ 2008/05/20 1:14 とりこらぼ。

まあまあ厳しくして欲しい (3/3) ~現実は甘くない、けど楽しい~

# Cool:)! 2011/04/27 19:18 E Cigarette

Really fun!

# Super Site 2011/05/28 13:50 obuv liska

Comrade kill yourself

# Develop the topic further. 2011/08/25 0:35 XRumer

I never thought about that. Tell mom, she did not believe it!

# http://blogs.wankuma.com/torikobito/archive/2007/11/01/105471.aspx?& 2011/10/06 1:05 http://blogs.wankuma.com/torikobito/archive/2007/1

http://blogs.wankuma.com/torikobito/archive/2007/11/01/105471.aspx?&

# erFsbnrNuZ 2012/01/07 13:33 http://www.luckyvitamin.com/p-123061-yes-to-carrot

Pleased to read intelligent thoughts in Russian. I`ve been living in England for already 5 years!...

# http://ezinearticles.com/?How-to-Choose-a-Suitable-Cake-Pan&id=5915590 2012/02/06 13:25 http://ezinearticles.com/?How-to-Choose-a-Suitable

http://ezinearticles.com/?How-to-Choose-a-Suitable-Cake-Pan&id=5915590

# ãƒãƒ¼ãƒãƒªãƒ¼ ショルダーバッグ 2012/11/02 11:07 http://burberry.suppa.jp/

It's a shame you don't have a donate button! I'd definitely donate to this excellent blog! I suppose for now i'll settle for book-marking and adding your RSS feed to my Google account. I look forward to new updates and will share this site with my Facebook group. Chat soon!

タイトル  
名前  
Url
コメント