Devuelve un nulo en lugar de lanzar una excepción y documentar claramente la posibilidad de un valor de retorno nulo en la documentación de la API. Si el código de llamada no respeta la API y busca el caso nulo, lo más probable es que produzca algún tipo de "excepción de puntero nulo" de todos modos :)
En C++, puedo pensar en 3 sabores diferentes de configuración un método que encuentra un objeto.
Opción A
Object *findObject(Key &key);
nulo retorno cuando un objeto no puede ser encontrado. Agradable y simple. Yo iría con este. Los enfoques alternativos a continuación son para personas que no odian a los paramáticos.
Opción B
void findObject(Key &key, Object &found);
Pass en una referencia a la variable que va a recibir el objeto. El método arroja una excepción cuando no se puede encontrar un objeto. Esta convención es probablemente más adecuada si realmente no se espera que un objeto no se encuentre; por lo tanto, lanza una excepción para indicar que se trata de un caso inesperado.
Opción C
bool findObject(Key &key, Object &found);
El método devuelve falso cuando un objeto no puede ser encontrado. La ventaja de esta opción sobre A es que se puede comprobar en el caso de error en un solo paso claro:
if (!findObject(myKey, myObj)) { ...
lo que haga, asegúrese de documentarlo. Creo que este punto es más importante que exactamente qué enfoque es el "mejor". – Rik
Esto depende de las expresiones idiomáticas prevalecientes en el lenguaje de programación. Por favor marque esta pregunta con una etiqueta de lenguaje de programación. – Teddy
La devolución nula solo puede significar éxito o falla, que a menudo no es mucha información (algunos métodos pueden fallar de muchas maneras). Las bibliotecas deberían arrojar excepciones para hacer explícitos los errores y de esta manera el programa principal puede decidir cómo manejar el error en un nivel superior (en contraste con la lógica de manejo de errores incorporada). –