Systems Hungarian の賛否両論を見てきました。数年間、私はすべての変数に名前を付けることによってこのシステムを使用するレガシープロジェクトに取り組んできました。たとえば、(strName、intAge、btnSubmitなどの)変数タイプの接頭辞を付けます(元のハンガリーアプリの接頭辞はタイプではなく変数)。次のプロジェクトではそれを完全に破棄したいのですが、それに頼らずに同じようなものに一意の名前を付けるのは難しいと思います。
メールアドレスを収集してデータベーステーブルに保存するためのウェブフォームと、アドレスをデータベースに保存する関数を呼び出すボタンがあるとします。
ハンガリースタイルの表記法を使用している場合、ボックスをtxtEmail
、ボタンをbtnEmail
、テキストボックスに含まれる値をstrEmail
と呼ぶことができます。次に、関数storeEmail(strEmail)
を使用してメールを保存します。ここには明確な規則があります。各変数が何であるかは明らかです。
これらの変数に名前を付けるためのベストプラクティスは何でしょうか
最後のポイントが最も重要です。プロジェクト全体で、また同僚と一貫性を保つために何をする必要があります。一貫性を実現するには主に2つの方法があり、可能であれば両方を使用する必要があります。まず、ツールを使用して、ビルド時に命名規則を確認します。 .Netの世界では、StyleCopがそのようなツールの良い例です。一貫性を確保するための2番目の方法は、すべてのコードのピアレビューを行うことです。
あなたの他の2つのポイントは代替案について尋ねているようです。代替案が必要かどうかはわかりません。ハンガリー語の人気がなくなった点は、型システムとツールが少し厳しかったときに型を説明するために使用されていたことです。つまりCでプログラミングしていて、型を追跡する唯一の方法の周りにポインターを渡す場合は、ハンガリー語を使用することでした。これで、C#やJava=などの言語を使用している場合は、ポインタを使用しないため(またはごくまれに)、そのため、ハンガリー語の必要性はなくなりました。また、最新のIDEでは、変数の上にマウスを置くか、最悪の場合はショートカットを使用して元の宣言を表示することで、型を非常に簡単に確認できます。したがって、なんらかの表記は必要ないと思います。変数に何をするかという名前を付けてください。メールの場合アドレスは「email」または「emailAddress」のみを使用します。顧客名の場合は「customerName」などを使用します。
Webフォーム、Windowsフォーム、その他のグラフィカルなものを扱う場合、テキストボックスとラベルが一緒に結合されるなど、非常に緊密に結び付けられたコントロールを使用できるため、Systems Hungarianを使用することは理にかなっています。それらを区別するためにtxtEmail
およびlblEmail
という名前を付けることができます。私の経験では、これは一般的で実際に役立ちます。
ただし、コードビハインドでは、この種の命名は不要です。メールの保存に使用されているstring
型の変数がある場合は、email
という名前を付けます。なんらかの理由で混乱した場合、ほとんどのIDEでは、カーソルを合わせてそのタイプを確認できるはずです。 (理想的には、OOのものでは、いくつかのオブジェクトの属性である可能性があり、user.Email
はさらに明確です。)
email
という正しい名前のGUIコントロールではないコードで宣言されているオブジェクトが複数ある場合、設計に本質的に何らかの問題があると思います。
変数を「長い間」にするものは何ですか?
txtEmail
、btnEmail
の代わりに、UserEmailText
、UserEmailButton
、およびAdminEmailText
、AdminEmailButton
を使用できます
これに関する問題は、変数が長くなり始めていると感じ始める可能性があることです。
AdminEmailIsValid
は、変数を許可する期間の境界線になり始めます。
さらに、一連の変数とそれらの変数に対する一連の操作を再利用していることに気付くかもしれません。これがOOP is designed for。です。変数のセットの代わりに、汎用オブジェクトを作成します。
class EmailForm
var textBox, button, text
function storeEmail()
次に、新しい変数をクラスとしてインスタンス化し、同じドット表記を使用してデータにアクセスできます。
userEmailForm = new EmailForm(...data...)
adminEmailForm = new EmailForm(...different data...)
doSomething( userEmailForm.text )
doSomethingElse( adminEmailForm.text )
もちろん、これはOOPパラダイムを使用する言語を対象としていますが、一般的なWeb開発言語の大部分はオブジェクト指向であるか、オブジェクト指向コード(PHP、Python、C#、 C++、Java、JavaScript、ActionScriptなど)。