Функция и Оператор -- что это такое в программировании. Отличия

Сначала уточним, что такое оператор, а что такое функция (речь идёт о высокоуровневывх языках программирования типа Pascal или, скажем, PHP)

Чего общего

И сразу отметим что и оператор и функция выполняют какую-то операцию (действие) над данными, в потому в смысле философском, или, скажем, математическом, они ничем не отличаются, просто "оформляется" это действие несколько разными способами, о чем мы и поговорим.

Что такое оператор

Оператор -- знак какой либо операции, операции же обычно производятся над объектами, например, во многих языках программирования сложение двух литералов можно произвести используя оператор суммы, известный нам как "плюс":

2 + 5 

-- прежде чем читать дальше отметьте себе, что данные часто пишутся "сбоку" от оператора, например у бинарных операторов (тех, что принимают два значения, как этот оператор суммы) данные часто записываются справа и слева (подробнее см. например в заметке об операторах и присваивании в Паскаль).

Что такое "функция"

Процедура/функция/метод класса -- всё это сути своей подпрограммы.

Подпрограмма -- это программа, которую основная программа вызывает для совершения каких либо действий.

Если функция нестандартная и вы реализуете её сами (например в Паскале это делается так), то в теле своей функции вы можете вызывать другие функции и использовать операторы, то есть по сути, функция -- это просто сгруппированный код, который, как ожидается, решит какую-то конкретную задачу.

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

sum(a, b)

-- такая функция сложит значения переменных $a$ и $b$, то есть сделает в точности тоже, что и оператор суммы, но заметьте, что тут используется совершенно другая записать передачи данных для операции над ними -- это как раз "компьютерный" стиль, когда данные для операции перечисляются в скобках после её имени.

Какая разница (запись в коде)

Пришло время проговорить о разнице между тем что называют оператором и тем что называют функцией.

Итак ещё раз, предположим, что в вашем языке программирования есть:

  • оператор сложения чисел $+$
  • функция $sum()$ вычисляющая сумму двух чисел (не важно стандартная ли она или вы написали её сами, используя возможности языка программирования, который вы используете).

и пусть у вас есть задача записать в переменную $z$ сумму двух числовых литералов (ну или просто "сумму двух чисел") $2$ и $5$.

Тогда с использованием оператора это делается так:

z := 5 + 2;  // (присваивание с синтаксисе Паскаль)

А с использованием функции так:

z := sum(5, 2);

-- как мы видим и тот и тот подход производит действие над данными, но запись различна. Операторы обычно используются в "школьном" смысле, то есть данные находятся справа и слева, например, как в операторах работы с остатком в Паскале.

Что могло бы быть -- если бы операторов вообще не было

Таким образом, мы видим, что если бы была возможность определить (создать) функцию с именем "+" (из одного символа), то мы могли бы делать такой вызов, для сложения:

+(5, 2)

ну или с записью в переменную:

z := +(5, 2);

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

То есть разные формы записи связаны скорее с традицией и удобством восприятия.
Перейдём к выводам.

Выводы

Чем похожи функции и операторы:

  1. и те и другие производят действия над данными (операции), потому оператор часто называют "знаком операции", а функцию можно называть "именем операции".
  2. и те и другие "возвращают" результат, после выполнения действия/действий над данными.

Чем отличается функция от оператора:

  1. Операторы обычно являются частью ядра языка программирования, во многих языках программист не может создавать новых операторов, в вот свои подпрограммы (напр. функции) писать может.
  2. Операторы в реальном программировании обычно выполняют более "простые" действия чем функции.
  3. Данные для работы операторов и для работы функции в коде передаются по-разному (об это было выше).