リストの戻り値に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())
}

どう考えてもこうした方が便利ですね!

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です