Простой вопрос, но я часто слышу, как эти три термина определяются с такой яростью, но которые, как мне известно, на протяжении многих лет означают разные вещи.
Каковы "правильные" определения "процедур", "методов", "функций", "подпрограмм" и т.д.?
Я собираюсь дать здесь другой ответ: практически говоря, на самом деле нет никакой разницы, за небольшим исключением, что «метод» обычно относится к подпрограмме, связанной с объектом в языках OO.
Термины «процедура, функция, подпрограмма, подпрограмма и метод» на самом деле означают одно и то же: вызываемую подпрограмму внутри более крупной программы. Но трудно придумать определение, охватывающее все варианты использования этих терминов, потому что они не используются последовательно в разных языках программирования или парадигмах.
Можно сказать, что функция возвращает значение. Ну, следующая функция C не возвращает значение:
void f() { return; }
...но я сомневаюсь, что вы найдете кого-нибудь, кто назовет это процедурой.
Конечно, в Паскале процедуры не возвращают значения, а функции возвращают значения, но это просто отражение того, как был разработан Паскаль. В Фортране функция возвращает значение, а подпрограмма возвращает несколько значений. Тем не менее ничто из этого на самом деле не позволяет нам придумать «универсальное» определение для этих терминов.
На самом деле термин «процедурное программирование» относится к целому классу языков, включая C, Fortran и Pascal, только в одном из которых термин «процедура» используется для обозначения чего-либо.
Так что ничто из этого не является действительно последовательным. Единственным исключением, вероятно, является «метод», который, по-видимому, почти полностью используется в объектно-ориентированных языках, ссылаясь на функцию, связанную с объектом. Хотя, даже это не всегда последовательно. C++, например, обычно использует термин «функция-член», а не метод (хотя термин «метод» проник в жаргон C++ среди программистов).
Дело в том, что ничто из этого на самом деле не является последовательным. Он просто отражает терминологию, используемую любыми языками, которые были в моде в то время.