リストの戻り値にNullを返すな

      2018/10/12

戻り値にもNull Objectパターンをちゃんと意識しましょう。

配列、リスト

配列やリストを返すメソッドを作成する際、エラー時の戻り値としてNull(null, NULL)を返すコードを仕事でもたまに見かけます。
この場合、使用側でサイズを知るために、Nullかどうかを判断する必要が出てきます。
必ず、Nullでなく、空(Empty)の配列、リストを返すようにしましょう。
そもそも設計段階でどういう戻り値を返すかを決めていれば良いのですが、過去に自分が途中参画したプロジェクトでは実装者に委ねられていたのか、あるメソッドは空(Empty)を返すし、あるメソッドはNullを返しているという事がありました。

NGケース

int[] GetArray() {
    // エラー時.
    return null;
}
List<string> GetList() {
    // エラー時.
    return null;
}

OKケース

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())
}

 - 設計 ,