У меня странный вопрос, о котором я всегда думал, но никогда не мог найти практического применения.Я смотрю, чтобы найти достаточное обоснование для этого.
Когда обработка пустого указателя / ссылочного исключения предпочтительнее, чем проверка нуля?Если вообще.
Это относится к любому языку, который имеет дело с нулевыми указателями / ссылками, который имеет функции обработки исключений.
Мой обычный ответ на это будет выполнять нулевоепроверьте, прежде чем делать что-либо с указателем / ссылкой.Если не ноль, продолжайте как обычно и используйте это.Если ноль, обработайте ошибку или увеличьте ее.
т.е. (в C #)
string str = null;
if (str == null)
{
// error!
}
else
{
// do stuff
int length = str.Length;
// ...
}
Однако, если бы мы не делали проверку и просто использовали ее вслепую, исключение было быподнял.
string str = null;
int length = str.Length; // oops, NullReferenceException
// ...
Будучи исключением, мы, безусловно, могли бы поймать это, чтобы ничто не мешало нам сделать это (или есть?):
string str = null;
try
{
int length = str.Length; // oops, NullReferenceException
// ...
}
catch (NullReferenceException ex)
{
// but that's ok, we can handle it now
}
Теперь я признаю, что это не таксамый чистый код, но он не менее рабочий код, и я бы не стал делать это нормально.Но есть ли шаблон дизайна или что-то, где это полезно?Возможно, это более полезно, чем предварительная проверка нуля заранее.
Единственные случаи, когда я могу себе представить, что это может быть полезно, - это многопоточная среда, в которой незащищенная общая переменная слишком рано устанавливается в ноль.Но как часто это происходит?Хороший код, который защищает переменные, не будет иметь этой проблемы.Или, возможно, если кто-то писал отладчик и хотел, чтобы исключение было выдано явно, только чтобы обернуть его или еще что-то.Может быть, непредвиденное повышение производительности или устранение необходимости в других вещах в коде?
Я мог бы ответить на некоторые из моих вопросов, но есть ли другой способ сделать это?Я не ищу «делать это только потому, что мы можем», как примеры или просто плохо написанный код, а для практического использования.Хотя со мной все будет в порядке, «в этом нет никакой практической пользы, сделайте проверку».