2011-06-24 7 views
-2

私はいつも返されるべきメソッド呼び出しのために悪い練習であることをnullオブジェクトを返すと考えました。今xbox360 XNA APIメソッドからnullを返します。悪い練習ですか?

Int GetFieldByID(String IDString); 

ので

Int m_MyReturnedID = GetFieldByID("myGamerTag"); 

を言うことができます、私はIDが見つからなかった場合、我々は-1を返し、その後、その可能性があるため、nullオブジェクトを返すのではなく、それを扱う可能性があることを前提としていたいです実際に何かが内部的に間違っていたことを意味します。あなたが見ることができるように

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.findgamerbyid.aspx

: 要求されたIDに一致する

戻り値

ネットワークゲーマーをとにかく、私は、XNAの開発者のウェブサイトにわずかであり、このを見ていましたゲーマーに一致する が見つからなかった場合はnull。

私はこのようなnullオブジェクトを返すことは悪い習慣であるという私の先入観に間違っていますか?なぜなら、M $開発者は、XNA/Liveなどのサービス、特にさまざまな繰り返しの後に、彼らが何をしているのかを正確に知るべきだと私は思っています。

おかげ

+1

なぜ-1を返すのがnullよりも優れていますか? – Mauricio

+1

引用している例があなたの質問と一致しません。実際のリンクは 'int'または' null'を返すことについて何も言わない - それは 'NetworkGamer'を返すと言います、または指定されたIDが見つからなければ' null'を返します。 'int'と' NetworkGamer'がAFAICTを表すObjectとの間には違いがあります。 –

+0

@Ken White - 私の最初の例は、擬似的な例であったため、私の最初の例は一致しませんでした。その後、別の例としてXNAドキュメントリンクをフォローしました。私は、オブジェクトと組み込みデータ型の違いを知っています。質問に答えてみましょう。 @Maurico私はわからないので、私の質問です。 (同じタイプなので) –

答えて

1

あなたはここに記述している2つの異なる状況があります。

  • 参照型を返す(あなたの例のように)nullにすることはできません値の型、
  • を返すには、(のようにあなたが実際にリンクしているAPIで) - これはNullableタイプにも当てはまります。

値型は、あなたが「見つからない」状況に-1を返すことがあります理由である、nullにすることはできません。ほとんどの時間ゼロが有効な値であるため、しばしば0を返すことはできません。この場合、-1sentinel valueです。

参照型class)オブジェクト指す可変 nullにすることができる(すなわち、任意のオブジェクトを参照しません)。ただし、「有効でない」を表す「センチネル状態」を持つように参照型を作成することもできます。

これはもちろん、お尻の完全な痛みです。それをしないでください。

代わりにこれをチェックする:

if(foo != null) ... 

は、あなたは、このやっていると思います。より多くの仕事をされ、そして何かがnull以外ネスを強制しても、あなたがしたい

if(foo != null && foo.IsValid) ... 

まだこれを行う必要があります:

if(foo.IsValid) ... 

これは本当にあなたに何も勝てない。 プラスあなたは書いたのすべてのクラスに余分なビットを処理するためのすべての余分なコードを書く必要があります。

あなたの理論の実際の問題は、 "何かが内部的に間違っていた"場合にメソッドがnullを返すべきであるというあなたの考えです。その場合、メソッドはほとんどcertianly 例外をスローする必要があります。

+1

優秀な答え、ちょうど私が探していたもの、ありがとう! ^^ –

+1

+1。非常によく尋ねられない質問に対する抜群の答え。 –

関連する問題