Метод vs Функция vs Процедура

Метод vs Функция vs Процедура
Метод vs Функция vs Процедура - rhsupplies @ Unsplash

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

Каковы "правильные" определения "процедур", "методов", "функций", "подпрограмм" и т.д.?

Я собираюсь дать здесь другой ответ: практически говоря, на самом деле нет никакой разницы, за небольшим исключением, что «метод» обычно относится к подпрограмме, связанной с объектом в языках OO.

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

Можно сказать, что функция возвращает значение. Ну, следующая функция C не возвращает значение:

void f() { return; }

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

Конечно, в Паскале процедуры не возвращают значения, а функции возвращают значения, но это просто отражение того, как был разработан Паскаль. В Фортране функция возвращает значение, а подпрограмма возвращает несколько значений. Тем не менее ничто из этого на самом деле не позволяет нам придумать «универсальное» определение для этих терминов.

На самом деле термин «процедурное программирование» относится к целому классу языков, включая C, Fortran и Pascal, только в одном из которых термин «процедура» используется для обозначения чего-либо.

Так что ничто из этого не является действительно последовательным. Единственным исключением, вероятно, является «метод», который, по-видимому, почти полностью используется в объектно-ориентированных языках, ссылаясь на функцию, связанную с объектом. Хотя, даже это не всегда последовательно. C++, например, обычно использует термин «функция-член», а не метод (хотя термин «метод» проник в жаргон C++ среди программистов).

Дело в том, что ничто из этого на самом деле не является последовательным. Он просто отражает терминологию, используемую любыми языками, которые были в моде в то время.


LetsCodeIt, 26 мая 2023 г., 12:39