リストの戻り値にNullを返すな
戻り値にもNull Objectパターンをちゃんと意識しましょう。
配列、リスト
配列やリストを返すメソッドを作成する際、エラー時の戻り値としてNull
(null, NULL
)を返すコードを仕事でもたまに見かけます。
この場合、戻り値を使用する側でサイズを知るためには、まずNull
かどうかを判断する必要が出てきます。
必ずNull
ではなく、空(Empty)の配列、リストを返すようにしましょう。
そもそも設計段階でどういう戻り値を返すかを決めていれば良いのですが、過去に自分が途中参画したプロジェクトでは実装者に委ねられていたのか、あるメソッドは空(Empty)を返すし、あるメソッドはNull
を返しているということがありました。
悪い設計
int[] GetArray() {
// エラー時.
return null;
}
List<string> GetList() {
// エラー時.
return null;
}
良い設計
int[] GetArray() {
// エラー時.
return new int[0];
}
配列のサイズ0が有効なのは意外に知られていないようです。
List<string> GetList() {
// エラー時.
return new List();
}
文字列
文字列の場合はケースバイケースですが、表示用の文字列なら空文字を返すようにします。
どうしてもNull
を返す場合は、関数ヘッダに注意書きするなど使用者が分かるようにします。
C#
string GetDisplayString() {
// 表示するものがない.
return String.Empty;
}
Java
String GetDisplayString() {
// 表示するものがない.
return "";
}
C# delegate
C#を使い始めの頃によくやってた処理。(^^;
職場の既存コードもこんな感じだったし・・・(言い訳)
public event EventHandler<EventArgs> _EventClick = null;
private void sendEvent() {
if (_EventClick != null) {
_EventClick(this, new EventArgs())
}
}
ここでもNull
チェック不要にする方法があります。
こんな感じ。
public event EventHandler<EventArgs> _EventClick = delegate { };
private void sendEvent() {
_EventClick(this, new EventArgs())
}
どう考えてもこうした方が便利ですね!