Верните нуль вместо того, чтобы бросать исключение и четко документировать возможность нулевого возвращаемого значения в документации API. Если вызывающий код не соблюдает API и не проверяет нулевой случай, скорее всего, это приведет к каким-то «исключению нулевого указателя» :)
В C++ я могу представить себе 3 разных вкуса настройки метод, который находит объект.
Вариант А
Object *findObject(Key &key);
Возвращение нуль, когда объект не может быть найден. Ницца и просто. Я бы пошел с этим. Альтернативные подходы ниже для людей, которые не ненавидят out-params.
Вариант Б
void findObject(Key &key, Object &found);
передать ссылку на переменную, которая будет получать объект. Метод генерирует исключение, когда объект не может быть найден. Это соглашение, вероятно, более подходит, если на самом деле не ожидается, что объект не будет найден - поэтому вы делаете исключение, чтобы показать, что это неожиданный случай.
Вариант C
bool findObject(Key &key, Object &found);
Метод возвращает ложь, когда объект не может быть найден. Преимущество этого варианта над А в том, что вы можете проверить в случае ошибки в одном понятном шаге:
if (!findObject(myKey, myObj)) { ...
Что бы вы ни делали, убедитесь, что вы задокументировать. Я думаю, что этот момент более важен, чем именно тот подход «наилучший». – Rik 2008-10-06 23:04:48
Это зависит от преобладающих идиом языка программирования. Пожалуйста, пометьте этот вопрос тегом языка программирования. – Teddy 2009-10-01 22:41:14
Возвращение null может означать только успех или неудачу, что очень часто не является большой частью информации (некоторые методы могут потерпеть неудачу разными способами). Библиотекам следует лучше исключать исключения, чтобы сделать ошибки явными, и таким образом основная программа может решить, как обрабатывать ошибку на более высоком уровне (в отличие от встроенной логики обработки ошибок). – 2013-08-20 11:33:13