Возвращать значения успеха, когда вы не ожидаете, что что-то не получится, обычно плохой дизайн. Вы можете забыть проверить возвращаемые значения или проверить их неправильно, и если вы начнете использовать разные значения для разных ошибок, вещи быстро выйдут из-под контроля. (-1
: успех или неудача? Это зависит от автора!)
Вместо этого вы должны использовать исключения для исключительных обстоятельств. Когда исключения не обрабатываются, они обычно вызывают завершение приложения, что, безусловно, заставляет вас не забывать проверять их. Их синтаксис ясен, и вы не засоряете свой код проверками.
Вы не указали язык, поэтому вот пример VB.NET, который делит число:
Function FloorDivide(ByVal a As Integer, ByVal b As Integer) As Integer
Dim result As Boolean = a / b
If Double.IsNaN(result) Then Throw New DivideByZeroException()
Return CInt(Math.Floor(result))
End Function
Вы можете использовать его без проверки значения успеха, но вы все равно можете обрабатывать ошибки, используя операторы Try...Catch
:
Try
FloorDivide(1, 0)
Catch ex As DivideByZeroException
MessageBox.Show("Something went terribly wrong! :D")
'Exit, maybe?
End Try
(Не то чтобы я говорил, что вы должны защищаться от деления на ноль таким образом; отфильтруйте свои данные!)
Если вы забудете выполнить эту проверку, вам вскоре напомнят на этапе тестирования, вместо того, чтобы ваш код молча провалился. Это также намного чище, и область действия Try...Catch
может быть настолько большой, насколько вы хотите, возможно, обрабатывая любые ошибки, возникающие в конкретном подверженном ошибкам методе, и выбрасывая их. Кто знает?
Так что, как правило, используйте исключения. Однако, если вы планируете справиться с ними, вам необходимо выполнить проверку.