Как называются «специальные» возвращаемые значения, которые сигнализируют о состоянии? - PullRequest
2 голосов
/ 11 октября 2019

Предположим, у меня есть функция, которая вычисляет длину и возвращает ее как положительное целое число, но также может вернуть -1 для тайм-аута, -2 для "невозможно вычислить" и -3 для недопустимых аргументов.

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

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Исключения и возвраты статуса статья именует их как коды состояния возврата :

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

Лично я бы также назвал их кодами состояния, аналогично кодам состояния HTTP (если мы притворяемся, что ответ HTTP похож на возврат функции).

В качестве примечания, кроме исключений и статуса возвратакодов, также существует монадный подход к обработке ошибок, который в некотором смысле объединяет первые два подхода. Например, в Scala монаду Either можно использовать для указания возвращаемого значения, которое может выражать как код состояния ошибки, так и обычное счастливое значение без необходимости блокировать часть домена для кодов состояния:

def divide(a: Double, b: Double): Either[String, Double] =
  if (b == 0.0) Left("Division by zero") else Right(a / b)

divide(4,0)
divide(4,2)

который выводит

res0: Either[String,Double] = Left(Division by zero)
res1: Either[String,Double] = Right(2.0)
0 голосов
/ 11 октября 2019

Это пример "магического" значения . Я не знаю более конкретного термина, когда эта идея применяется к возвращаемому значению функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...