none
integer と Boolean の代入動作について RRS feed

  • 質問

  • よろしくお願いします。

    VB.NET で、

    Dim X as Integer = 5
    Dim Y as Boolean

    Y = X

    は、MSIL上評価式(cgt.un)として扱われるようです。
    でも、両変数がIntegerの場合は代入(ldloc,stloc)です。

    Option Strict を On にすると、このコードはコンパイル前にエラーとなるのですが、
    そうでない場合は、ビルド時も実行時もエラーとはならず、発見しにくいバグとなる場合があります。
    例えば、WEBサービス側がこのようなバグを内包していた場合、クライアント側から、この現象を推測すらできない可能性があります。

    みなさんはどうされているのでしょうか?
    Option Strict On を義務付けるべきなのか、それとも何か他に推奨される方法などがあるでしょうか?

    VS2008を使用しています。

    ご意見、よろしくお願いします。


    K.Oumi
    2009年9月3日 8:36

回答

  • 私の場合は Option Strict On にするようにしていますね。
    会社でも、基本的に義務づけます。
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 9:03
    • Option Strict Onとする
    • コードレビューで暗黙的型変換を排除する

    http://blogs.wankuma.com/hatsune/
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 9:57
  • 基本はOption Strict Onにしていますが、ExcelなどComを呼び出す場合に、バージョン違いで参照を変えなければいけないのを避けるためにOption Strict Offにしています。その場合にも呼び出しを1つのソースファイルに局所化してそのファイルだけをOffにしています。
    2010からはC#でもdynamicキーワードによってレイトバインディングができるようになります。

    http://blogs.msdn.com/dd_jpn/archive/2009/01/28/9380132.aspx

    現状のVBやC#では共変・反変の機能が貧弱ですから型のつじつま合わせのためにキャストをしなければならないことが多く、そんな場合にもレイトバインディングを活用する場面が出てくるかも知れません。

    http://www.mahoroba.ne.jp/~mw_ken
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 23:13
  • 少し前に似た話題がありましたので、ご紹介しておきます。

    Option StrictをOnにする意義について
    http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/87225739-d2e8-44ab-8c74-bd5829ba8c97


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月4日 0:24
    モデレータ

すべての返信

  • 私の場合は Option Strict On にするようにしていますね。
    会社でも、基本的に義務づけます。
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 9:03
    • Option Strict Onとする
    • コードレビューで暗黙的型変換を排除する

    http://blogs.wankuma.com/hatsune/
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 9:57
  • 基本はOption Strict Onにしていますが、ExcelなどComを呼び出す場合に、バージョン違いで参照を変えなければいけないのを避けるためにOption Strict Offにしています。その場合にも呼び出しを1つのソースファイルに局所化してそのファイルだけをOffにしています。
    2010からはC#でもdynamicキーワードによってレイトバインディングができるようになります。

    http://blogs.msdn.com/dd_jpn/archive/2009/01/28/9380132.aspx

    現状のVBやC#では共変・反変の機能が貧弱ですから型のつじつま合わせのためにキャストをしなければならないことが多く、そんな場合にもレイトバインディングを活用する場面が出てくるかも知れません。

    http://www.mahoroba.ne.jp/~mw_ken
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月3日 23:13
  • 少し前に似た話題がありましたので、ご紹介しておきます。

    Option StrictをOnにする意義について
    http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/87225739-d2e8-44ab-8c74-bd5829ba8c97


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク K.Oumi 2009年9月4日 5:19
    2009年9月4日 0:24
    モデレータ
  • 皆様、貴重なご意見をありがとうございました。

    Option Strict On を基本として、例外的な場合のみOffを許すという事が良いと感じました。
    三輪の牛さんの「1つのソースファイルに局所化してそのファイルだけをOff」についても、ああ~、意外とこういうことって気がつかないもんだなぁと思いました。
    「Option StrictをOnにする意義について」も大変参考になりました。

    ありがとうございました。


    K.Oumi
    • 編集済み K.Oumi 2009年9月4日 5:19 みえないコードの削除
    2009年9月4日 5:17