Digamos que você receba o seguinte ...
List<Thing> theThings = fubar.Things.All();
Se não houvesse nada para retornar, o que você esperaria que fubar.Things.All () retornasse?
Edit: Obrigado pelas opiniões. Vou esperar um pouco e aceitar a entrada com mais altos.
Eu concordo com as respostas até agora, principalmente as que sugerem uma coleção vazia. Um fornecedor forneceu à API várias chamadas semelhantes ao exemplo acima. Um fornecedor que faturou US $ 4,6 milhões em receita por meio de suas APIs no ano passado, a BTW. Eles fazem algo que eu discordo fundamentalmente - eles lançam uma exceção.
Things
? Se faz sentido que oThings
campo retorne nulo, faz sentido receber uma exceção porque você não procurou nulo antes de ligar paraAll()
. No entanto, concordo com as pessoas que pensam quefubar.Things
devem retornar uma coleção vazia em vez de nula.Respostas:
Das duas possibilidades (por exemplo, retornar uma
null
ou retornar uma coleção vazia), eu escolheria retornar uma coleção vazia, porque isso permite ao chamador ignorar uma verificação do valor retornado. Em vez de escrever issoeles seriam capazes de escrever o seguinte:
Esse segundo fragmento de código é mais curto e fácil de ler, porque o nível de aninhamento é menor em um.
fonte
Eu esperaria uma lista vazia.
theThings
ainda seria um objeto, mastheThings.Count
outheThings.size()
retornaria0
.fonte
Problemas de design como esse são tratados pelo padrão Null Object
A sugestão particularmente aplicável ao seu caso (retornando
List
quando não houverThing
s) é:fonte
Você deve, IMHO, retornar um valor VAZIO. Eu não sei sobre c #, mas em Java, temos o seguinte:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
fonte
Enumerable.Empty<T>()
, que retorna um vazioIEnumerable<T>
(ver msdn.microsoft.com/en-us/library/bb341042.aspx )Eu retornaria uma coleção vazia com o retorno de um valor nulo, pois dessa forma você pode evitar escrever uma verificação nula no código de chamada.
fonte
As duas soluções significam coisas diferentes.
Se houver apenas zero da coisa que você está retornando, você SEMPRE retornará uma coleção vazia! Veja o caso de uma listagem de diretório. Se não houver arquivos no diretório, você retornará uma coleção vazia de arquivos.
Por outro lado, se o diretório não existir, isso não é realmente apropriado. "Não posso devolver nada" significa algo totalmente diferente. Nesse caso, você deve retornar nulo ou lançar uma exceção, dependendo da situação, não basta retornar uma coleção vazia como se nada estivesse errado.
fonte