Digamos que te dan lo siguiente ...
List<Thing> theThings = fubar.Things.All();
Si no hubiera nada que devolver, ¿qué esperarías que volviera fubar.Things.All ()?
Editar: Gracias por las opiniones. Esperaré un poco y aceptaré la entrada con más ups.
Estoy de acuerdo con las respuestas hasta ahora, particularmente aquellas que sugieren una colección vacía. Un proveedor proporcionó una API con varias llamadas similares al ejemplo anterior. Un proveedor que hizo $ 4.6 millones en ingresos a través de sus API el año pasado, por cierto. Hacen algo con lo que estoy básicamente en desacuerdo: lanzan una excepción.
Things
? Si tiene sentido que elThings
campo devuelva nulo, entonces tiene sentido que reciba una excepción porque no verificó nulo antes de su llamadaAll()
. Sin embargo, estoy de acuerdo con las personas que piensan quefubar.Things
debería devolver una colección vacía en lugar de nula.Respuestas:
De las dos posibilidades (es decir, devolver una
null
o una colección vacía) elegiría devolver una colección vacía, ya que permite que la persona que llama omita una comprobación del valor devuelto. En lugar de escribir estoellos podrían escribir esto:
Este segundo fragmento de código es más corto y más fácil de leer, porque el nivel de anidación es más bajo en uno.
fuente
Esperaría una lista vacía.
theThings
seguiría siendo un objeto, perotheThings.Count
otheThings.size()
volvería0
.fuente
Problemas de diseño como ese son abordados por el patrón de objeto nulo
La sugerencia particularmente aplicable en su caso (regresar
List
cuando no hayThing
s) es:fuente
En mi humilde opinión, debe devolver un valor VACÍO. No sé acerca de C #, pero en Java tenemos esto:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
fuente
Enumerable.Empty<T>()
, que devuelve un vacíoIEnumerable<T>
(ver msdn.microsoft.com/en-us/library/bb341042.aspx )Devolvería una colección vacía sobre la devolución de un valor nulo porque de esa manera puede evitar escribir una verificación nula en el código de llamada.
fuente
Las dos soluciones significan cosas diferentes.
Si solo hay cero de lo que está devolviendo, ¡SIEMPRE devuelve una colección vacía! Tome el caso de una lista de directorio. Si no hay archivos en el directorio, devuelve una colección de archivos vacía.
Por otro lado, si el directorio no existe, eso no es realmente apropiado. "No puedo devolver nada" significa algo completamente diferente. En ese caso, debe devolver nulo o lanzar una excepción según la situación, no solo devuelva una colección vacía como si nada estuviera mal.
fuente