it-swarm-id.com

Metode vs Fungsi vs Prosedur

Pertanyaan sederhana, tetapi saya sering mendengar tiga istilah ini didefinisikan dengan keganasan seperti itu, tetapi yang telah saya ketahui memiliki arti yang berbeda selama bertahun-tahun.

Apa definisi "Prosedur", "Metode", "Fungsi", "Subrutin" yang benar, dll?

113
Django Reinhardt

Saya akan pergi dengan jawaban yang berbeda di sini: secara praktis, benar-benar tidak ada perbedaan, dengan sedikit pengecualian bahwa "metode" biasanya merujuk ke subrutin yang terkait dengan objek dalam OO bahasa.

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 dari 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 hampir seluruhnya digunakan dengan bahasa OO, merujuk pada fungsi yang dikaitkan dengan objek. Meskipun, meskipun ini tidak selalu konsisten. C++ , misalnya, biasanya menggunakan istilah "fungsi anggota" daripada metode, (meskipun istilah "metode" telah merangkak 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.

109
Charles Salvia

A function mengembalikan nilai, tetapi a procedure tidak.

A method mirip dengan suatu fungsi, tetapi adalah internal untuk bagian dari kelas. Istilah metode digunakan hampir secara eksklusif dalam pemrograman berorientasi objek.

69
Bruce Alderman

A function adalah sesuatu yang mengambil banyak input dan mengembalikan satu atau lebih nilai. Jika nilai yang dikembalikan sepenuhnya ditentukan oleh input, dan fungsi tidak memiliki efek samping (masuk, mungkin, atau menyebabkan perubahan status di luar dirinya sendiri), maka itu disebut fungsi murni.

A procedure adalah fungsi yang tidak mengembalikan nilai. Secara khusus, ini berarti bahwa prosedur hanya dapat menyebabkan efek samping. (Itu mungkin termasuk memutasikan parameter input!)

A method adalah fungsi yang menutup lebih dari satu set variabel, yaitu, a closure. Dibutuhkan nol atau lebih parameter input, memiliki akses ke set variabel ini, dan mengembalikan nol atau lebih nilai. Dalam OO bahasa metode ini dilampirkan ke objek atau kelas.

Dalam sebagian besar bahasa utama OO, variabel tertutup tersebut disebut bidang anggota, atau variabel contoh, dari suatu objek. Metode dapat berupa fungsi murni, fungsi tidak murni atau prosedur.

Definisi terakhir mengarah ke objek = struct + closures .

53
Frank Shearar

Bruce memiliki jawaban yang bagus . Saya akan menambahkan, secara semantik:

  • Suatu prosedur harus "melakukan sesuatu" pada argumen atau menyebabkan beberapa efek samping lainnya (mis. printf)
  • Fungsi harus (a) menjawab pertanyaan tentang argumen, atau (b) menghitung nilai baru berdasarkan argumen
  • Metode fungsi harus menjawab pertanyaan tentang keadaan objek
  • Metode prosedur harus mengubah keadaan objek
14
Scott Whitlock

jawaban rinci yang bagus di atas; ceritanya adalah mereka semua akan memberi rasa subrutin; apa yang dimaksud dengan setiap istilah akan bervariasi sesuai dengan konteks bahasa pemrograman

secara umum, fungsi mengembalikan nilai, tetapi tidak harus

metode adalah generik OOP istilah saat ini

dalam SQL, prosedur tersimpan memiliki output tetapi biasanya hanya mengembalikan kode kesalahan, sementara fungsi yang ditentukan pengguna harus mengembalikan nilai (yang mungkin merupakan hasil-set)

lagi, perbedaan yang tepat antara istilah-istilah ini tergantung pada siapa yang Anda ajak bicara!

4
Steven A. Lowe

80% kemahiran terkait langsung dengan keakraban dengan nomenklatur,

95% produktivitas adalah kemampuan untuk mengidentifikasi apa yang bermanfaat saat ini terlepas dari istilah yang digunakan untuk menggambarkannya

Saya lebih suka memanggil mereka semua metode dalam c # kecuali kembali ketika saya menggunakan MSSQL kita punya sproc, tapi tentu saja sekarang kita menggunakan Postgres dan mereka disebut fungsi.

2
MvcCmsJon