Можно ли возвращать null из функции?
вроде как с правилом определились - исключения только в случае баальшой ошибки.
Не надо смешивать теплое с мягким:
- исключение (или возврат) это технические средства откинуться из программы и что-то вернуть. Т.е. мы выбираем между throw или return.
- ошибки или не ошибки это семантика программы и логика обработки. "Пользователь не найден" это можно быть баальшой ошибки, если это запрещено в доках. Но это может быть нормально, если в доках написано что этого следует ожидать. Здесь мы решаем разрешается ли null или нет.
Ну чтобы было понятноее. Throw (exception) и return это два технических способа вывалиться их программы и вернуть какое-то значение в исходную:
- Можно использовать только return,
- а можно переписать все только на throw без возвратов вообще
Извне разницы не будет видно и это только вопрос удобства, предпочтений, best practices, религиозных и сексуальных предпочтений. Поэтому важно разделить эти два аспекта: логика программы и способ возврата (исключения vs. возврат).
Когда использовать исключения, а когда возврат и в чем разница? Это следующий холивар. Я бы сказал, что принципиальное отличие исключений в том, что они умеют вываливаться иерархически через многие уровни и делают это по умолчанию (если их не поймали). Возвраты таким не занимаются и вываливаются только на один уровень выше. Отсюда вывод: если хочешь чтобы твой результат мог быть виден на все уровни выше, то используй исключения (throw). Если твой резуьтат только для одного исходного метода, то используй возврат (return).