web-dev-qa-db-ja.com

「非ハンガリー語」の命名基準に対する合理的な例外として、「Is」プレフィックスと「On」サフィックスはありますか?

まず、この質問については以前にここで説明したことがあると思いますが、見つかりません。あなたがそれを見つけたら、私の謝罪。

私は新しいプロジェクトを開始していて、IsResolvedやResolvedOnがResolvedよりも私にとって理にかなっている理由を理解しようとしています。明らかに、何かが「CompanyName」という名前の場合(たとえば)、私はそれを文字列としてテストすることをかなり確信しています。ただし、「解決済み」と表示され、それが説明するオブジェクトに解決日の有効な値がない可能性があることがわかっている場合は、タイプを調べてテスト方法を決定する必要があります:undefined/null/etc 。 (日付として)、またはブール値として。

IsとOnは通常、変数型を宣言する以上のことを行うと主張するのは合理的ですか。彼らは意図を宣言しますか?それとも、他の理由でコードが明確になるというだけで、私は完全に成文化することができませんか?

反対側の議論として、Resolvedのタイプを見て、それがブール値であることがわかった場合、私は答えを得るでしょう。おそらくこれは、「実現可能性」変数を調べて、それがint、enum、またはその他のものであるかどうかを判断する必要があることを知っていることと同じです。 (おそらくそれは「Feasbility」も最適ではない名前になることを意味します。)そして、「ResolvedOn」の場合でも、「IsResolved」をさらに検査する必要があるかどうかを判断するために、null許容かどうかを検査する必要があります。 "値。型から推測できる変数名に2回目のエンコードを行う、冗長性のポイントは何ですか?

ハンガリー語は一般的にはそうではありませんが、Is [Property]と[Property] Onが私にとって意味がある理由を理解してください。または、このような例外が意味をなさない理由を説明してください。

注:私は主にSQL、C#、およびJavaScriptを使用しています。

2
shannon

まず第一に、ハンガリアン記法に対するアレルギー反応のほとんどは、一貫した適用が非常に不自然に見える名前をもたらす傾向があるという事実から生じています。特定のタイプを示唆する接頭辞または接尾辞の時折の使用は、名前が非常に強制的に見えない限り、ハンガリアン記法と見なされるべきではありません。

「Resolved」の代わりに「IsResolved」または「ResolvedOn」を使用して行っていることは、名前によって伝達される情報(つまり、その名前のクラスまたはオブジェクトによって表されるもの、このように名前が付けられた関数が返すもの)を明確にすることです。 。

さらにいくつか例を挙げます。

  • 会社
  • 会社名
  • 解決済み
  • IsResolved
  • ResolvedOn

コードを読むとき、「解決済み」はそれが何を表すのかわからない唯一のコードであり、それを調べる必要があります。文脈が違いを生み、私が常に正しいとは言いませんが、「解決済み」は、正しく使用されているように見えるかどうかが一目でわからないリスト内の唯一の名前です。

あなたの例のどちらも実際にはハンガリアン記法を含んでいないと私は言うでしょう、それがあなたがそれらを受け入れられると思う理由です。 blnResolvedまたはdtResolvedはハンガリアン記法を使用します。 IsResolvedとResolvedOnは、単に説明的な名前です。必要に応じてIsResolvedをHasBeenResolvedにすることもできますが、かなり長くなり、追加情報は伝達されません。

とはいえ、ハンガリアン記法に対する嫌悪感が良い名前の邪魔にならないようにしてください。DateResolvedまたはResolvedOnDateは、単なる説明的な名前です。一部のシステムではデータ型の近似値が含まれていることがあります。TSQL2000の場合、日付データ型がないため、正確なデータ型ではないことに注意してください。

4
jmoreno

ResolvedはIsResolvedと同様にブール値だと思います。 ResolvedOnは日付である可能性があります。

ただし、特に他の誰かのコードを調べている場合は、変数の表記や名前に依存してその型を判別することはできません。異なる言語で名前が付けられた変数を想像してみてください(メキシコからの交換留学生がいて、彼女はすべての変数にスペイン語で名前を付けました)。また、たとえば変数CompanyCodeがあります。文字列なのか整数なのかわかりますか?

2
Aleksandra

Is [Xxxxxxx]が理にかなっていると思う理由は、SQLに習熟しているためだと思います。 Microsoft SQLには、ユーザーの生活を非常に楽にするいくつかのIsXxxxxxxxx関数があります。

Microsoft SQLのIsXxxxxxxx型プログラミングへの露出は、思考プロセスを形作っており、SQLの外部でそれを使用する傾向があります。なぜ、それは理にかなっているからです。他の言語に同様の組み込み関数がない理由に疑問を抱くかもしれません。また、使用する他の言語に同様のIsXxxxxx関数がない場合は、同様のIsXxxxxx関数を作成することを検討します。

私は推測しているだけですが、あなたの[Xxxxxxxx] Onはおそらく、オンまたはオフのいずれかになり得るプロパティを単純化するための同様の考えの自然な進行です。