Я подозреваю, что я не собираюсь заглядывать в этот вопрос, но я очень опытный программист, и я надеюсь, что некоторые из более открытых читателей обратят внимание.
Я считаю, что он лучше подходит для объектно-ориентированных языков программирования, поскольку их процедуры возврата значений (VRP) являются детерминированными и чистыми.
«VRP» - это современное академическое название для функции, которая вызывается как часть выражения и имеет возвращаемое значение, которое условно заменяет вызов во время вычисления выражения. Например. в таком выражении, как x = 1 + f(y)
, функция f
служит в качестве VRP.
«Детерминистический» означает, что результат функции зависит только от значений ее параметров. Если вы вызовете его снова с теми же значениями параметров, вы обязательно получите тот же результат.
«Чистый» означает отсутствие побочных эффектов: вызов функции ничего не делает , за исключением вычисления результата. На практике это может быть истолковано как означающее отсутствие важных побочных эффектов, поэтому, если VRP выводит сообщение отладки каждый раз, когда оно вызывается, например, это, вероятно, можно игнорировать.
Таким образом, если в C # ваша функция не является детерминированной и чистой, я говорю, что вы должны сделать ее функцией void
(другими словами, не VRP), и любое значение, которое она должна вернуть, должно быть возвращено в либо out
, либо ref
параметр.
Например, если у вас есть функция для удаления некоторых строк из таблицы базы данных, и вы хотите, чтобы она возвращала количество удаленных строк, вы должны объявить ее примерно так:
public void DeleteBasketItems(BasketItemCategory category, out int count);
Если вы иногда хотите вызвать эту функцию, но не получите count
, вы всегда можете объявить перегрузку.
Возможно, вы захотите узнать , почему этот стиль лучше подходит для объектно-ориентированного программирования. В целом, он вписывается в стиль программирования, который можно (немного неточно) назвать «процедурным программированием», и это стиль процедурного программирования, который лучше подходит для объектно-ориентированного программирования.
Почему? Классическая модель объектов состоит в том, что они имеют свойства (или атрибуты), и вы запрашиваете и манипулируете объектом (главным образом) путем чтения и обновления этих свойств. Стиль процедурного программирования облегчает эту задачу, поскольку вы можете выполнять произвольный код между операциями, которые получают и устанавливают свойства.
Недостатком процедурного программирования является то, что, поскольку вы можете выполнять произвольный код повсюду, вы можете получить очень тупые и уязвимые для взаимодействия взаимодействия через глобальные переменные и побочные эффекты.
Итак, довольно просто, сигнализирует кому-то, читающему ваш код, о том, что функция может иметь побочные эффекты, если она не возвращает значение.