2009-05-09 15 views
5

対値のような暗黙のデフォルト値に依存しているのは悪い習慣です:代わりにそれらを明示的に設定するは、明示的な値

class Node 
{ 
    int red; 
    int green; 
    int blue; 

    bool grayscale; 

    Node next; 
} 

class Node 
{ 
    int red = 0; 
    int green = 0; 
    int blue = 0; 

    bool grayscale = false; 

    Node next = null; 
} 

答えて

3

私は考えていませんデフォルト値は、言語で作業している開発者が知っている/習得しなければならないものであるため、悪い習慣です。

唯一の欠点は、デフォルトのリストがないと、初期化された値を決して見ることができないことです。それがデフォルト以外の何かに初期化されている場合に注意するのに少し時間がかかるかもしれません。

11

いいえ、私はデフォルト値に頼っても問題ないと思います。明示的にそれらを割り当てることは、コードを乱雑にするだけです。また、デフォルト以外の値を割り当てるフィールドを簡単に区別できる利点もあります。

+2

私は同意します。私の脳が処理するための画面上の情報が少ないほど、より良い。 – Vadim

7

私はそれらのメンバーの初期値が何であるべきかをあなたが考えていることを証明しているので、いつもそれらを入れています。

bool isCool; 

は、「私は、これは起動時にクールではないことを知っている」か、それはあなたがそれについて考えていなかったことを単に意味するかもしれない意味するかもしれません。

bool isCool = false; 

は明らかに意図的な決定です。

2

明白に宣言されているデフォルト値ですが、それはあまりにも「言い回し」です...コードを読むときに私はまだ少し遅くなります。

人々はデフォルト値を知らないか、C#5.0でboolのデフォルト値をtrueに変更するかもしれないという非合理的な恐れがあるため、コード内にあると考えられます。

0

値を明示的に指定する方が好きです。それは、メモリからデフォルト値をロードしようとする脳に与える負荷を軽減します。それらをあらかじめ保存しておくとよいでしょう。大丈夫です。すべての答えの代わりとして

よう

string name = string.Empty; 

または

Guid userID = Guid.Empty; 
+1

文字列とGuidのデフォルト値はstring.EmptyとGuid.Emptyではなく、nullです。だから、あなたがそれらを明示的に設定しなければならないと、彼らが "Empty"で始めることを望むならば。 –

+0

文字列について私はあなたに同意する、それはnullです。 Guidの場合、 "初期化されていない"変数の値をチェックすると、Guid.Emptyが動作します。 – User

+0

だからこそ、それを明示的に書く方が良いです。あなたはそれをこのように知っています、次の人はそれを別に知っています。混乱を招く点は何ですか? – User

1

私は、コンストラクタでそれらの初期値を置くために使用するので、私は外の変数のinitializacionを探して気にしない、前にそのはず。

1

プリミティブデータ型のデフォルト値がわかるのは開発者の責任であり、厳密には必要ではありません。しかし、いくつか指摘しているように、それはあなたがその問題について考えていることを証明しています。

また、コードの変数タイプの圧倒的多数は、作成したカスタムタイプになります。開発者は、カスタム列挙型のデフォルト値が何であるかを知る責任はありません。適切な通信を行うには、これらの場合にデフォルト値を指定する必要があります。私たちは習慣の生き物なので、常に変数を初期化するという習慣を確立する方がいいです。それは、あなたのアプローチに一貫している限り、クラスレベルで行っても、コンストラクターで行っても違いはありません。

関連する問題