Можно ли возвращать null из функции?
Варианты есть? При каких случаях что лучше использовать?
Так с ходу сложно придумать нормальный пример.
Попробую сформулировать так: если null не является ошибкой, то можно подумать над возвратом null объекта.
Например, если у тебя есть фабрика, которая создает объект для доступа к БД, то, в случае если фабрика по какой-то причине не может создать этот объект, нужно возвращать null, т.к. без БД жизни у программы нет :) И чем раньше мы пробросим ошибку наверх, тем лучше.
Если же null - валидный ответ системы, то null объект может оказаться очень полезным. Например, ты ищешь клиента по фамилии. Вбиваешь фамилию, клацаешь "Дальше". Если клиентов с такой фамилией несколько, то появляется список с выбором. Если такой клиент один, то сразу открываются данные клиента. Если клиента нет, то сразу открывается страница для ввода нового клиента. При таком юз-кейсе имеет смысл сделать null объект.
Собственно говоря, объект с дефолтным состоянием по сути и является null объектом. И такой подход используется довольно часто - создаем объект, после чего "подправляем" пару (из 100500) полей и в бой :)