Функция и Оператор -- что это такое в программировании. Отличия
Primary tabs
Forums:
Сначала уточним, что такое оператор, а что такое функция (речь идёт о высокоуровневывх языках программирования типа 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);
-- но обычно так не пишут (да и многие языки не дают создавать функции, имена которых совпадают с записью операторов).
То есть разные формы записи связаны скорее с традицией и удобством восприятия.
Перейдём к выводам.
Выводы
Чем похожи функции и операторы:
- и те и другие производят действия над данными (операции), потому оператор часто называют "знаком операции", а функцию можно называть "именем операции".
- и те и другие "возвращают" результат, после выполнения действия/действий над данными.
Чем отличается функция от оператора:
- Операторы обычно являются частью ядра языка программирования, во многих языках программист не может создавать новых операторов, в вот свои подпрограммы (напр. функции) писать может.
- Операторы в реальном программировании обычно выполняют более "простые" действия чем функции.
- Данные для работы операторов и для работы функции в коде передаются по-разному (об это было выше).
- Log in to post comments
- 20437 reads