.NET プラットフォームに移行する Visual Basic 6 プログラマーを対象とした Visual Basic 2005 のクラスを準備しています。Option Strict
を常に有効にすることを推奨するかどうかについて、アドバイスをお願いします。
私はもっぱら C スタイルのプログラミング言語、主に Java と C# だけを扱ってきたので、私にとって明示的なキャストは、決してオプションではなかったので、私がしなければならないことを常に期待しています。ただし、コード内の型について過度に明示する必要がないため、実際に時間を節約できるため、遅延バインディングのサポートが組み込まれている言語を使用することの価値を認識しています。これは、動的型付け言語の一般的な普及によってさらに証明されています。
、動的言語ランタイムを使用する .NET プラットフォームでも。
これを念頭に置いて、VB.NET を使用して初めて .NET に取り組み、VB6 のバックグラウンドを持つ人は、コンパイル時の型チェックを使用する必要があるという考え方に入ることが推奨されます。 CLR? それとも、遅延バインディングの利点を享受し続けても「OK」ですか?
8 に答える
はい!Option Strict は、間違いなく .Net のベスト プラクティスです。.Net のコアは厳密に型指定されたプラットフォームであり、DLR がより完全にサポートされるまで続くことを強調します。いくつかの例外を除いて、すべてDim
の and にFunction
は、明示的な型を宣言する必要があります。LINQ や Boo、JScript などは例外であり、ルールを証明しています。
他に指摘すべき点をいくつか挙げます。このすべてをよく知っていると思いますが、私は以前の VB6ers によって記述された多くの VB.Net コードを使用して維持する必要があったため、これは私にとって何か痛い場所です。
- 古い文字列関数を使用しないでください:
LEN()
、REPLACE()
、TRIM()
など - ハンガリー疣贅は推奨されなくなりました。 コーシャではありません
oMyObject
。彼らがあなたを信じていない場合は、 Microsoft のデザイン ガイドラインのsMyString
リファレンスを見せてください。 AndAlso
彼らが新しい/OrElse
論理演算子について学ぶことを確認してください- パラメータ化されたクエリと最新の ADO.Net。それを十分に強調することはできません。二度と電話する必要はありません
CreateObject()
。 - スコープは、.Net では VB6 とは異なる動作をします (より重要です)。VB.Net にはまだモジュールがありますが、静的クラスにより類似しています。VB6 によって提供される部分的な OOP サポートとは対照的に、実際のオブジェクト指向環境での開発がどのように異なるかを理解することが重要です。メソッドが途方もない長さで実行されることを許可する正当な理由はもうありません。
- ジェネリックとインターフェイス ( を含む
IEnumeralbe(Of T)
) の概要を理解してもらい、二度と を使用してはならない理由を学びましょうArrayList
。
続けても構いませんが、VB.Net の隠し機能に関する質問を紹介して、この暴言を締めくくります。
Option Strictを有効にして開発に費やす時間は、後でデバッグ時間を大幅に節約します。
Option Strict
明らかに、適切な単体テストを置き換えることはできませんが、その逆もありません。単体テストは と同じエラーを検出できOption Strict
ますが、これは、単体テストにエラーがないこと、単体テストが頻繁かつ早期に行われていることなどを意味します。
優れた単体テストを作成することは、必ずしも簡単ではなく、時間がかかります。ただし、コンパイラは、型チェックの形式で、いくつかのテストを既に実装しています。少なくとも、これは時間を節約します。多くの場合、テストが間違っていた/すべてのケースをカバーしていなかった/コードの変更を説明するのを忘れていたため、これにより多くの時間とお金が節約されます (少なくとも時折)。
要約すると、単体テストが正しいという保証はありません。一方、コンパイラによって実行される型チェックが正しいか、少なくともその不具合 (チェックされていない配列の共分散、循環参照のバグなど) がよく知られており、十分に文書化されているという強力な保証があります。
別の要約:はい、Option Strict On
間違いなくベスト プラクティスです。実際、私はこのようなオンライン コミュニティで何年も働いてきました。明らかにOption Strict
有効になっていないコードについて誰かが助けを必要とするときはいつでも、私たちは丁寧にこれを指摘し、これが修正されるまでそれ以上の助けを提供することを拒否しました. 時間を大幅に節約できます。多くの場合、この問題はその後解消されました。これは、HTML サポート フォーラムでヘルプを求めるときに正しい HTML を使用することにいくらか似ています。無効な HTML は機能する可能性がありますが、そうでない可能性があり、問題の原因となる可能性があります。したがって、多くの専門家は支援を拒否しています。
はい!!!!
私の意見では、開発者としても大学のインストラクターとしてもそうです。
最初から良い習慣を身につけるのが最善です。それにより、プロセス全体がはるかに簡単になります。OptionStrictは、私の意見では必要な要素の1つです。
追加した
理由は文字通りたくさんありますが、重要なのはそれがベストプラクティスであり、新しい言語を教えるときは、最初からそれらのベストプラクティスを教えることが重要です。
ここには 2 つのレベルがあることに注意してください。
Option Explicit Option Strict
2 つの主な違いは、Option Strict が異なるデータ型の VB の自動変換を無効にすることです。変数を別の型に割り当てるには、CType または別のデータ変換関数を明示的に使用する必要があります。
私は 1.0 から VB を使用しており、これの要点はわかりますが、異なるインターフェイスやクラスを実装または継承したオブジェクトを処理する場合、Strict は特に熱心すぎると思います。
最初は Strict から始めて、邪魔になったら Explicit に落とします。しかし、両方ともオフにしないでください。そうすると、狂気と過剰なデバッグ時間が発生します。
長年 VB を使用してきた私は、すべての浮動小数点変数にほぼ Double を使用しています。このようにして、丸めや精度の低下に関する多くの問題を回避できます。VB6 では long を 32 ビット整数として使用しましたが、Integer は .NET でも Int32 と同じように機能します。Microsoft がこれらのキーワードを再定義する場合に備えて、Integer、Long などの代わりに Int32、Int16 などを使用することもお勧めします。
私はRS Conleyに同意しません(非常に珍しい)。私のお気に入りの VB6 教祖である Francesco Balena と Dan Appleman は、VB6 の自動変換を嫌い、.NETを 支持しています。Option Strict
多くの経験豊富な VB6 プログラマーは、自動変換を「邪悪な型の強制」( pdf ) として知っており、喜んでスイッチをオンにしOption Strict
ます。
Option Strict
多くの複雑なリフレクション コードを避けるために、1 つの小さなモジュールを なしで使用する方がよい場合があります。しかし、それは規則を証明する例外です。
開発サイクルの早い段階で問題を修正するとリソースの消費が最小になるという Boehm の考えを考えると、私は、開発者ができるだけ早く問題を解決するのに役立つすべてのツールのファンです。このような理由から、私は IntelliSense のようなものを支持しています。これは、効率を高めるだけでなく、サイクルの早い段階で作業コードを実装するのに役立つツールでもあります。(動作しますが、必ずしも正しいとは限りません。)
このような理由から、私は Option Strict を使用して、ミスステップとそれに伴う修正を "設計時間" の奥深くに留めておくことも支持します。
タイプをチェックすることに慣れている場合は、オプションを厳密に設定することをお勧めします。オフにすると利点がありますが、コンパイラが通常文句を言うエラーを見つけるように脳が調整されていない場合は、オンのままにしておくとよいでしょう。私はVB.Netで多くの作業を行ってきました。ほとんどの場合、オプションを厳密にオフにして作業していても、オンにするとかなりの数のオプションが妨げられる状況をたくさん見ました。バグ。