問題の背景
Option Strictは、Visual Basic .NETで型の安全性を高めるために導入されました。言語の古いバージョン(VB6)では、暗黙の型変換が行われており、プログラムの予期しない動作や捕まえにくいバグが生じることがありました。Strictをオンにすると、動作がより明示的で厳密に型付けされます。
問題
暗黙の型変換(例えば、文字列を数値型変数に代入したり、関数から異なる型を返したりすること)は、実行時にエラーを引き起こします。Option Strict Offのプロジェクトは、多くの場合、捕まえにくいバグの原因となります。
解決策
Option Strict Onの場合、暗黙の型変換は許可されず、すべての変数宣言、パラメータ、および関数の返される型は明示的に指定する必要があります。これにより、コンパイル時に一連のエラーが防止され、高品質なコードが促進されます。
コードの例:
Option Strict On Dim x As Integer x = "123" ' コンパイルエラー — 明示的な変換が必要 x = CInt("123") ' OK Function GetNumber(ByVal input As String) As Integer Return input ' コンパイルエラー End Function
主な特徴:
Option Strict Offはなぜ必要なのか?Strict Onの方が便利で安全では?
Option Strict Offは、すでに多くの暗黙の型変換が組み込まれている古いコードをサポートするために使用されます(例えば、VB6からの移行など)。新しいプロジェクトでは、より信頼性が高く安全なコードのためにStrictをオンにすることが推奨されます。
プロジェクトがデフォルトでOffの場合、ファイルレベルで型の厳しさを戻すことはできますか?
はい、個別のモジュールやファイルの先頭にOption Strict Onディレクティブを追加することで、このファイルに対してのみ厳密な型チェックが適用されます。
' ファイルの先頭で: Option Strict On
Late bindingをObject経由で使用する際にStrictは障害となりますか?
はい、Option Strict Onのときには、コンパイル時に認識されないオブジェクトのメンバーを呼び出すことはできません(late binding)。オブジェクトを既知の型にキャストするか、Offのときにのみ動的です。
プログラマーはOption Strictをオンにせず、TextBoxからのデータ入力で数値型変数に直接値を代入しました。誤ったデータを入力すると、プログラムがクラッシュしました。
利点:
欠点:
プログラマーはOption Strict Onを有効にし、すべての変換をTryParseを通じて明示的に行いました。エラーはコンパイル時に捕捉され、実行時の例外は最小限です。
利点:
欠点: