Tôi sẽ có một câu trả lời khác ở đây: thực tế mà nói, thực sự không có gì khác biệt , ngoại trừ một chút rằng "phương thức" thường đề cập đến một chương trình con liên kết với một đối tượng trong các ngôn ngữ OO.
Các thuật ngữ "thủ tục, hàm, chương trình con, chương trình con và phương thức" tất cả thực sự có nghĩa giống nhau: một chương trình con có thể gọi được trong một chương trình lớn hơn. Nhưng thật khó để đưa ra một định nghĩa nắm bắt tất cả các cách sử dụng biến thể của các thuật ngữ này, bởi vì chúng không được sử dụng nhất quán trên các ngôn ngữ lập trình hoặc mô hình.
Bạn có thể nói một hàm trả về một giá trị. Chà, hàm C sau đây không trả về giá trị:
void f() { return; }
... nhưng tôi nghi ngờ bạn sẽ tìm thấy bất cứ ai gọi đó là thủ tục.
Chắc chắn, trong Pascal, các thủ tục không trả về giá trị và hàm trả về giá trị, nhưng đó chỉ là sự phản ánh về cách Pascal được thiết kế. Trong Fortran, một hàm trả về một giá trị và một chương trình con trả về nhiều giá trị. Tuy nhiên, không ai trong số này thực sự cho phép chúng tôi đưa ra định nghĩa "phổ quát" cho các thuật ngữ này.
Trên thực tế, thuật ngữ "lập trình thủ tục" dùng để chỉ cả một nhóm ngôn ngữ, bao gồm C, Fortran và Pascal, chỉ một trong số đó thực sự sử dụng thuật ngữ "thủ tục" để chỉ bất cứ điều gì.
Vì vậy, không ai trong số này là thực sự phù hợp. Ngoại lệ duy nhất có lẽ là "phương thức", dường như được sử dụng gần như hoàn toàn với các ngôn ngữ OO, đề cập đến một chức năng được liên kết với một đối tượng. Mặc dù, thậm chí điều này không phải lúc nào cũng nhất quán. Ví dụ, C ++ thường sử dụng thuật ngữ "hàm thành viên" thay vì phương thức, (mặc dù thuật ngữ "phương thức" đã len lỏi vào ngôn ngữ C ++ trong số các lập trình viên.)
Vấn đề là, không ai trong số này là thực sự phù hợp. Nó chỉ đơn giản phản ánh thuật ngữ được sử dụng bởi bất kỳ ngôn ngữ nào đang thịnh hành tại thời điểm đó.