Мне интересно, каковы конкретные различия в терминологии, которую мы используем для группировки связанных частей кода. Я иногда видел термины, используемые взаимозаменяемо: во многих ОО-языках даже используется ключевое слово «функция» для определения метода. (Почему?)
Если вы хотите быть точным, каковы конкретные значения каждого? Или это просто то, что каждый язык выбирает, чтобы называть это?
terminology
Андрей Вит
источник
источник
function
методы: JavaScript и PHP. Оба используют одно и то же ключевое слово для не-методов (свободных функций), и в случае JavaScript на самом деле нет различия между функциями и методами, по крайней мере, не на уровне языка.Sub
естьFunction
без возвращаемого значения. УPython
вас может быть функция, которая не является частью какого-либо класса, поэтому это не метод. Вы также можете объявлять функции внутри функций, и вы можете делать это и в C #. Иногда они имеют разные названия по той же причине, что и яблоки и ананасы: потому что они разные.Ответы:
подпрограмма, подпрограмма
"подпрограмма", вероятно, происходит из ассемблера. Некоторые процессоры содержат инструкции для поддержки подпрограмм как способа организации кода и повторного использования общих разделов кода. Например, процессор 6502 имел инструкции JSR (переход к подпрограмме) и RTS (возврат из подпрограммы). Я помню, что он также широко использовался в структурном программировании, в котором программа представляет собой иерархию блоков кода, которые иногда назывались подпрограммами или подпрограммами. ИМО, это наиболее общие термины для некоторой единицы кода, которой временно передается управление для выполнения данной задачи.
функция, процедура
Они часто используются взаимозаменяемо, но в некоторых языках есть различие. В Паскале функция - это подпрограмма, которая возвращает значение, а процедура - это подпрограмма, которая не возвращает. В C и связанных языках каждая подпрограмма имеет тип возвращаемого значения (даже если он есть
void
), поэтому нет никаких различий.Метод, функция-член
Это два имени для одной и той же вещи - по сути, функции, связанной с данным классом или объектом.
оператор
Каждый язык имеет набор встроенных операторов. В некоторых языках, таких как C ++, операторы - это функции, которые могут быть переопределены (то есть заменены) и / или перегружены (то есть определены для новых типов).
анонимная функция
Это относится к функции без имени. Анонимные функции - это, по сути, блоки кода, которые можно назначать переменным или передавать в качестве параметров для последующего использования, например, в качестве процедуры завершения.
закрытие, лямбда-выражение, блок
Закрытие - это кусок кода, который связан с набором переменных. Я думаю о замыканиях как о анонимных функциях плюс контекст.
источник
2 + 2
. Есть небольшие исключения, такие как 1-arg, как++arg
(префикс) илиarg++
(постфикс). Хотя я не видел много постфиксных операторов ..Это зависит от языков, что вы можете сделать с ними
AFAIK, в Basic, если вы вызываете что-то, что ничего не возвращает, но выполняет работу с побочными эффектами, такими как печать, запись в файл или изменение глобальной переменной, это называется процедурой.
Если он что-то возвращает, это называется функцией.
В ООП-языке, таком как Java, я редко встречал термин «функция», но «метод», и было сказано, что функции - это вещи, которые являются глобальными и могут быть вызваны каждым.
В функциональной и OOP-языке scala метод не называется функцией, но вы можете передать такую вещь другому методу, и тогда он станет функцией.
Подпрограмма - это подпрограмма, которая, на мой взгляд, вызывается другой подпрограммой.
Таким образом, я не думаю, что есть краткое определение для всех языков и тем более парадигм. Вы должны учитывать конкретную культуру, в которой вы находитесь, если вы используете эти термины - возможно, вам следует сначала ввести свое определение.
источник
Я бы сказал, что в зависимости от контекста все эти слова могут означать одно и то же или совершенно разные вещи, например, то, что написал Калеб (но есть и другие, то есть языки, где операторы являются первоклассными функциями и т. Д.). Таким образом, трудно дать конкретное определение, и разумно не принимать слишком много, если контекст (язык программирования) не известен.
источник