Процедуры и функции. Отличия
Функция отличается от процедуры двумя особенностями:
- всегда вычисляет некоторое значение, возвращаемое в качестве результата функции;
- вызывается в выражениях.
Процедура C# имеет свои особенности:
- возвращает формальный результат void, указывающий на отсутствие результата;
- вызов процедуры является оператором языка;
- имеет входные и выходные аргументы, причем выходных аргументов - ее результатов - может быть достаточно много.
Хорошо известно, что одновременное существование в языке процедур и функций в каком-то смысле избыточно. Добавив еще один выходной аргумент, любую функцию можно записать в виде процедуры. Справедливо и обратное. Если допускать функции с побочным эффектом, то любую процедуру можно записать в виде функции. В языке С - дедушке C# - так и сделали, оставив только функции. Однако значительно удобнее иметь обе формы реализации метода: и процедуры, и функции. Обычно метод предпочитают реализовать в виде функции тогда, когда он имеет один выходной аргумент, рассматриваемый как результат вычисления значения функции. Возможность вызова функций в выражениях также влияет на выбор в пользу реализации метода в виде функции. В других случаях метод реализуют в виде процедуры.