さて、ここに行きます..潜在的なdownVote飼料ですが、列挙型は私のお気に入りの1つです..
視点
デザインとコードに最適なものに焦点を合わせます。DBにはその「データ型」がないため、列挙型を使用しませんか?わかった。次に、同じ理由でカスタムクラスを作成しないようにします。それはナンセンスです。
列挙型の良さ
(注:私はC#でコーディングしています)
- 問題のドメインの観点から物事を宣言することができます。文字列は文字列ですが、MonsterType列挙型はモンスター(タイプ)です。
- 列挙型は本質的に強く型付けされています。未定義の列挙値を使用すると、コンパイルエラーになります。OTOH、文字列のタイプミスは別のデバッグセッションです。
- 私は特に
switch
ステートメントが好きです。theHellOutta整数を打ち負かします:switch(MonsterType)
- 列挙型はすべての有効な値を徹底的に定義できます
- ドキュメントyになる傾向があります
- コード品質エンハンサー-新しいメンバーを追加するには再コンパイルする必要がありますが、それは慎重なことであり、関連するコードの変更を見逃すと、どこかで処理されていない新しい文字列値に対して爆発します(良いことです)。ロジック/処理エラー。デバッグセッションが必要です。
- デフォルトはnullではなくゼロです。ヌルの概念が物事を台無しにすることができる方法はおかしいです。それが属するデータベースで「null」を保持します。
- プロのコーディングのヒント:常にデフォルトのメンバーを明示的に定義します。再:
MonsterType.Unknown = 0
。あなたの報酬は、バグが少なく読みやすい、より簡単に書かれたコードになります。あなたのメンテナンスプログラマーはあなたに感謝します。
文字列の悪さ
- デフォルト値はnullです。これは、nullと「空の文字列」をめぐる絶え間ない戦いです。私はこのようなばかげた、バグの多いコードを頻繁に見ます:
if(string.IsNullorEmpty(myString.Trim()) ...
-myStringがnullの場合、プログラムは実行時例外で爆発します。列挙型では発生しません。
- 文字列の比較では大文字と小文字が区別されます
- タイプミスが発生しやすいエラー
- 「文字列」タイプは一般的なものであり、ドメインの観点から問題を表現するのに役立つことはありません。
myString = null
データベースからフェッチされた設定は、値を持つ変数ではなく、オブジェクトでもありませんが、私たちはそれをそのまま扱うようにしています!
整数の難読化
if (MonsterType == 3)...
それはどういう意味ですか?言っ途切れる。
これが実践的な演習です。IDEで、その「3」をクリックして、「定義を検索」するように依頼します。IDEが話すことができれば、「「3」が何を意味するのかを推測するのではなく、問題のドメインで物事を定義してみませんか?」と言うでしょう。
ああ、わかる。どこかで定数の混乱を宣言します。どこか。ああ、神様。列挙型を使用しているふりをしましょう!そして、タイプセーフな値のまとまりのあるセットで作業するよりも楽しいです!
nullは私を狂わせる
C#には、String.Empty
ある理由で静的プロパティがあります。値が明示的に(有効な)文字列ではないインスタンス化された文字列オブジェクトを表すために、有効な値(たとえば、スペース)またはnullをハイジャックしないことになります。これはnullと同じものではありません。
nullは、文字通り何も意味しません。それは「離れて、誰も家にいない」という意味です。コーダーは、たとえば「モンスターの種類が不明」という意味を望んでいることがよくありますが、大声で叫ぶ場合は、そのような概念を明示的に定義してください(上記の列挙型のヒントを参照)。このようにnullを使用するIMHOは、デザインに何かが欠けていることを意味します。
nullはコードゾンビです。それは歩き回っていますが、それは何も、死んで、何でもありません。そして、あなたが注意しなければ、それはあなたを噛むでしょう!
「空の」文字列をスペース文字またはnullとして格納することを決定するという終わりのない喜びを体験できます。
スペースは実際には有効な文字列ドメイン値であり、「値なし」の値ではありません。
そして、そのnullと「空の文字列」は実際には同じことを意味するわけではなく、それらを作成しようとすると、「自然な」機能が必要なときに問題が発生します。
そして、手元のタスクに合わせて、string.emptyからnull、spaceに、またはその逆に変換するコードでの絶え間ない混乱。時間の経過とともに、コードはこの点で一貫性がなくなります。
今私を聞いて、後で私を信じてください。