Нулевые ссылки больше не «избегают», как исключения, по крайней мере, от тех, кого я когда-либо знал или читал. Я думаю, вы не понимаете общепринятую мудрость.
Что плохо, так это попытка получить доступ к нулевой ссылке (или разыменовать нулевой указатель и т. Д.). Это плохо, потому что это всегда указывает на ошибку; вы никогда бы не сделать что - то подобное на цели, и если вы будете делать это нарочно, то , что еще хуже, потому что это делает его невозможно отличить ожидаемое поведение от багги поведения.
Существуют определенные группы, которые по какой-то причине просто ненавидят концепцию ничтожности, но, как указывает Эд , если у вас ее нет, null
или nil
вам просто придется заменить ее чем-то другим, что может привести к чему-то хуже, чем сбой (например, повреждение данных).
Фактически, многие структуры охватывают обе концепции; например, в .NET часто встречающийся шаблон - это пара методов, один из которых начинается с префикса Try
(например, TryGetValue
). В этом Try
случае для ссылки устанавливается значение по умолчанию (обычно null
), а в другом случае выдается исключение. Нет ничего плохого в любом подходе; оба часто используются в средах, которые их поддерживают.
Это действительно все зависит от семантики. Если null
допустимое возвращаемое значение, как в общем случае поиска в коллекции, верните null
. С другой стороны, если это недопустимое возвращаемое значение - например, при поиске записи с использованием первичного ключа, полученного из вашей собственной базы данных, - возврат null
будет плохой идеей, поскольку вызывающая сторона не будет ожидать этого и, вероятно, не буду проверять это.
На самом деле очень просто выяснить, какую семантику использовать: имеет ли смысл, когда результат функции не определен? Если это так, вы можете вернуть нулевую ссылку. Если нет, бросьте исключение.