nullではなくゼロ長の配列または集合を返します.
2381 ワード
まず悪い例を挙げましょう.
nullを返す場合
上記の例では、クライアント・プログラムが次のように処理されます.
クライアント・プログラマーはCheeseがnullであるかどうかを判断する必要があり、クライアント・コードを書くのに苦労し、クライアント・プログラマーもnullであるかどうかを判断することを忘れやすいことがわかります.
したがって,0であっても配列または集合の個数を返すことが望ましい.
配列の個数を返すと、クライアントコードは以下のように簡単に書くことができます.
また、集合値は、空の集合を返す必要があるたびに、同じ不変の空の集合を返すようにしてもよい.例:Collections.emptySet、emptyList、およびemptyMap.
例は次のとおりです.
nullを返す場合
private final List<Cheese> cheesesInStock = ...;
public Cheese[] getCheeses() {
if(cheesesInStock.size() == 0)
return null;
...
}
上記の例では、クライアント・プログラムが次のように処理されます.
Cheese[] cheeses = shop.getCheeses();
if(Cheeses != null &&
Arrays.asList(cheeses).contains(Cheese.STILTON))
System.out.println("Jolly good, just the thing.");
クライアント・プログラマーはCheeseがnullであるかどうかを判断する必要があり、クライアント・コードを書くのに苦労し、クライアント・プログラマーもnullであるかどうかを判断することを忘れやすいことがわかります.
したがって,0であっても配列または集合の個数を返すことが望ましい.
配列の個数を返すと、クライアントコードは以下のように簡単に書くことができます.
if(Arrays.asList(cheeses).contains(Cheese.STILTON))
System.out.println("Jolly good, just the thing.");
また、集合値は、空の集合を返す必要があるたびに、同じ不変の空の集合を返すようにしてもよい.例:Collections.emptySet、emptyList、およびemptyMap.
例は次のとおりです.
public List<Cheese> getCheeseList() {
if(cheesesInStock.isEmpty())
return Collections.emptyList();
else
return new ArrayList<Cheese>(cheesesInStock);
}