Я думаю, что это довольно субъективно, честно, поэтому я предпочитаю избегать такого метода определения, когда мне следует использовать исключения.
Вместо этого я предпочитаю рассмотреть три вещи:
- Возможно ли, что я захочу, чтобы стек вызовов раскрутил более одного уровня?
- Есть ли другой способ?(Вернуть ноль или код ошибки и т. Д.) Если да, то есть ли у меня хоть малейшая проблема с производительностью?
- Если ни один из них не приводит к четкому решению, которое легче прочитать тому, кто должен поддерживатькод?
Если # 1 верно, и у меня нет проблем с производительностью MAJOR, я, вероятно, решу использовать исключения, потому что это ускорит мое время разработки, чтобы не возвращать кодкоды (и вручную кодируют логику, чтобы они распространялись вверх по стеку вызовов при необходимости).Когда вы используете исключения, раскрутка стека вызовов бесплатна на время разработки.
Если # 2 имеет значение true, или я не собираюсь больше одного кадра (может быть, два?) Вверх по стеку вызовов, или яЕсли у вас есть серьезные проблемы с производительностью (например, в узком цикле), то я очень постараюсь найти другой способ, который не включает исключения.
Исключения являются лишь инструментом для программистов на языке, которыйподдерживает их.Я не верю, что они должны иметь какую-то внутреннюю ценность в отношении того, что является «исключительным» или нет.Вместо этого я говорю используйте их, когда они являются лучшим инструментом для работы .