Saya akan pergi dengan jawaban yang berbeda di sini: secara praktis, tidak ada perbedaan , dengan sedikit pengecualian bahwa "metode" biasanya mengacu pada subrutin yang terkait dengan objek dalam bahasa OO.
Istilah "prosedur, fungsi, subrutin, subprogram, dan metode" semuanya benar-benar memiliki arti yang sama: sub-program yang dapat dipanggil dalam program yang lebih besar. Tetapi sulit untuk menghasilkan definisi yang menangkap semua varian penggunaan istilah ini, karena mereka tidak digunakan secara konsisten di seluruh bahasa pemrograman atau paradigma.
Anda mungkin mengatakan suatu fungsi mengembalikan nilai. Nah, fungsi C berikut tidak mengembalikan nilai:
void f() { return; }
... tapi saya ragu Anda akan menemukan orang yang akan menyebutnya prosedur.
Tentu saja, dalam Pascal, prosedur tidak mengembalikan nilai dan fungsi mengembalikan nilai, tapi itu hanya refleksi bagaimana Pascal dirancang. Di Fortran, fungsi mengembalikan nilai, dan subrutin mengembalikan beberapa nilai. Namun tidak satu pun dari hal ini yang benar-benar memungkinkan kita untuk menghasilkan definisi "universal" untuk istilah-istilah ini.
Bahkan, istilah "pemrograman prosedural" mengacu pada seluruh kelas bahasa, termasuk C, Fortran dan Pascal, hanya satu yang benar-benar menggunakan istilah "prosedur" untuk berarti apa saja.
Jadi tidak ada yang benar-benar konsisten. Satu-satunya pengecualian mungkin adalah "metode", yang tampaknya digunakan hampir seluruhnya dengan bahasa OO, merujuk pada fungsi yang dikaitkan dengan objek. Meskipun, bahkan ini tidak selalu konsisten. C ++, misalnya, biasanya menggunakan istilah "fungsi anggota" daripada metode, (meskipun istilah "metode" telah merayap ke dalam bahasa C ++ di antara pemrogram.)
Intinya, tidak ada yang benar-benar konsisten. Ini hanya mencerminkan terminologi yang digunakan oleh bahasa apa pun yang sedang populer saat itu.