проверить нулевое значение перед разыменованием или просто перехватить нулевую ссылку через исключение - PullRequest
2 голосов
/ 08 июля 2011

проверить нулевое значение перед отсылкой или просто перехватить нулевую ссылку через исключение?за и против?

для 2-го варианта, он дает чистый, а иногда и лучше выполненный код.для 1-го варианта он может дать вам непрерывный поток, который вы хотели

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

Я бы сказал, что это полностью зависит от ситуации. Нет ничего плохого в том, чтобы выдавать исключение, если только это: exception .

С другой стороны, если вы ожидаете, что значение null может появиться в заданной точке (без основной ошибки), то вам обязательно нужно проверить значение null перед использованием / защитой объекта. *

Но, опять же, я не думаю, что здесь есть абсолютное правильное или неправильное - это зависит от ситуации.


Статья C ++ Исключения: плюсы и минусы углубляется в плюсы и минусы с исключениями. Это для C ++, но я предполагаю, что логику можно перенести и на многие другие разновидности языков программирования. Их вывод начинается с: "Нет простого ответа на вопрос" исключений или кодов ошибок ". Решение должно приниматься на основе конкретной ситуации, с которой сталкивается команда разработчиков. Некоторые грубые рекомендации могут быть: ..."

1 голос
/ 08 июля 2011

Проверьте наличие нулевого значения на границах системы и обработайте его соответствующим образом.Внутри вашего программного обеспечения вы знаете, когда что-то должно быть нулевым и что это значит, поэтому нет никаких причин делать ненужные проверки или перехватывать исключения, которые никогда не будут выброшены.Протестируйте свой код, где он взаимодействует с другими компонентами, чтобы убедиться, что он обрабатывает, например, пустые значения, возвращаемые сторонним кодом или передаваемые вызывающими сторонами вашего открытого API.

IMO, вам почти никогда не придетсяпоймать NullPointerException / NullReferenceException (или как его называет ваш язык).Если сторонняя библиотека возвращает ноль, лучший способ справиться с ней, как правило, - выдать собственное исключение с четким сообщением, которое вы можете позже зарегистрировать или вспомнить пользователю, например:

if(returnedValue == null)
{
    throw new MyDescriptivelyNamedException("libcrappy returned null again!");
}

Если потребитель вашего компонента передает нулевой аргумент, выведите ArugmentNullException, IllegalArgumentException или что-либо еще, соответствующее вашему языку / приложению.

1 голос
/ 08 июля 2011

Проверить на ноль.В зависимости от системы система обработки исключений работает неаккуратно, и исключения могут иметь потребности в распределении ресурсов, которые могут вызвать проблемы (редко, но возможно).

...