Secara umum, kita semua mendengar tentang fungsi atau prosedur dalam bahasa pemrograman. Namun, saya baru tahu bahwa saya menggunakan istilah-istilah ini hampir secara bergantian (yang mungkin sangat salah).
Jadi, pertanyaan saya adalah:
Apa perbedaan dalam hal fungsi mereka, tujuan dan penggunaannya?
Sebuah contoh akan dihargai.
(define (sqrt x) (newtons-method (lambda (y) (- (square y) x)) 1.0))
.Jawaban:
Fungsi mengembalikan nilai dan prosedur hanya menjalankan perintah.
Fungsi nama berasal dari matematika. Ini digunakan untuk menghitung nilai berdasarkan input.
Prosedur adalah seperangkat perintah yang dapat dieksekusi secara berurutan.
Di sebagian besar bahasa pemrograman, bahkan fungsi dapat memiliki seperangkat perintah. Karenanya perbedaannya hanya pada pengembalian bagian nilai.
Tetapi jika Anda ingin menjaga fungsi tetap bersih, (lihat saja bahasa-bahasa fungsional), Anda perlu memastikan suatu fungsi tidak memiliki efek samping.
sumber
Ini tergantung pada konteksnya.
Dalam bahasa seperti Pascal, fungsi dan prosedur adalah entitas yang berbeda, berbeda dalam apakah mereka menghasilkan atau tidak mengembalikan nilai. Mereka berperilaku berbeda wrt. sintaksis bahasa (mis. prosedur panggilan pernyataan formulir; Anda tidak dapat menggunakan panggilan prosedur di dalam ekspresi vs panggilan fungsi tidak membentuk pernyataan, Anda harus menggunakannya dalam pernyataan lain). Oleh karena itu, programmer Pascal-dibesarkan membedakan antara mereka.
Dalam bahasa seperti C, dan banyak bahasa kontemporer lainnya, perbedaan ini hilang; dalam bahasa yang diketik secara statis, prosedur hanya berfungsi dengan tipe pengembalian yang lucu. Ini mungkin mengapa mereka digunakan secara bergantian.
Dalam bahasa fungsional, biasanya tidak ada yang namanya prosedur - semuanya adalah fungsi.
sumber
Contoh dalam C:
Meskipun Anda harus mencatat bahwa Standar C tidak berbicara tentang prosedur, hanya berfungsi.
sumber
void function
. Kernighan & Ritchie Ch 1.7: "Dalam C, fungsi setara dengan subrutin atau fungsi dalam Fortran, atau prosedur atau fungsi dalam Pascal." Dengan kata lain ... jawaban ini salah.Secara umum, prosedur adalah urutan instruksi.
Suatu fungsi bisa sama, tetapi biasanya mengembalikan hasil.
sumber
Ada istilah subrutin atau subprogram yang merupakan kepingan kode parameter yang dapat dipanggil dari tempat yang berbeda.
Fungsi dan prosedur adalah implementasi dari itu. Biasanya fungsi mengembalikan nilai dan prosedur tidak mengembalikan apa pun.
sumber
Perbedaan Dasar
Perbedaan Tingkat Lanjut
Dalam SQL:
SELECT
serta DML (INSERT
,UPDATE
,DELETE
) pernyataan di dalamnya, sedangkan Fungsi memungkinkan hanyaSELECT
pernyataan di dalamnya.SELECT
pernyataan, sedangkan Fungsi dapat tertanam dalam aSELECT
pernyataan.WHERE
(atau aHAVING
atau aSELECT
blok ), sedangkan Fungsi bisa.JOIN
blok dengan tabel lain.JOIN
blok dan operasi Rowset lainnya.sumber
Lebih tepatnya, fungsi f mematuhi properti yang f (x) = f (y) jika x = y, yaitu menghitung hasil yang sama setiap kali dipanggil dengan argumen yang sama (dan dengan demikian ia tidak mengubah status dari sistem.)
Dengan demikian, rand () atau cetak ("Halo"), dll. Bukan merupakan fungsi melainkan prosedur. Sementara sqrt (2.0) harus menjadi fungsi: tidak ada efek yang dapat diamati atau perubahan status tidak peduli seberapa sering seseorang memanggilnya dan ia mengembalikan selalu 1,41 dan beberapa.
sumber
Jika kita agnostik bahasa di sini, prosedur biasanya menentukan serangkaian tindakan yang diperlukan untuk secara andal dan idempoten mencapai hasil tertentu. Artinya, prosedur pada dasarnya adalah algoritma.
Fungsi, di sisi lain, adalah bagian kode yang agak independen dalam program yang lebih besar. Dengan kata lain, fungsi adalah implementasi dari suatu prosedur.
sumber
Ini adalah pertanyaan lama yang terkenal, tetapi saya ingin berbagi lebih banyak wawasan tentang penelitian dan desain bahasa pemrograman modern.
Jawaban dasar
Secara tradisional (dalam arti pemrograman terstruktur ) dan secara informal, prosedur adalah konstruksi struktural yang dapat digunakan kembali untuk memiliki "input" dan untuk melakukan sesuatu yang dapat diprogram. Ketika sesuatu perlu dilakukan dalam suatu prosedur, Anda dapat memberikan argumen (aktual) ke prosedur dalam panggilan prosedur yang dikodekan dalam kode sumber (biasanya dalam semacam ekspresi), dan tindakan yang dikodekan dalam tubuh prosedur (disediakan dalam definisi prosedur) akan dieksekusi dengan substitusi argumen menjadi parameter (formal) yang digunakan dalam tubuh.
Sebuah fungsi lebih dari prosedur karena kembali nilai-nilai juga dapat ditentukan sebagai "output" dalam tubuh. Panggilan fungsi kurang lebih sama dengan panggilan prosedur, kecuali bahwa Anda juga dapat menggunakan hasil panggilan fungsi, secara sintaksis (biasanya sebagai subekspresi dari beberapa ekspresi lain).
Secara tradisional, pemanggilan prosedur (daripada pemanggilan fungsi) digunakan untuk menunjukkan bahwa tidak ada output yang harus tertarik, dan harus ada efek samping untuk menghindari panggilan menjadi no-ops, karenanya menekankan paradigma pemrograman imperatif . Banyak bahasa pemrograman tradisional seperti Pascal menyediakan "prosedur" dan "fungsi" untuk membedakan perbedaan gaya yang disengaja ini.
(Agar lebih jelas, "input" dan "output" yang disebutkan di atas adalah gagasan yang disederhanakan berdasarkan pada sifat sintaksis fungsi. Banyak bahasa juga mendukung lewat argumen ke parameter dengan referensi / berbagi, untuk memungkinkan pengguna mengirim informasi yang dikodekan dalam argumen selama panggilan berlangsung) Parameter tersebut bahkan dapat disebut sebagai "parameter masuk / keluar". Fitur ini didasarkan pada sifat objek yang dilewatkan dalam panggilan, yang ortogonal dengan sifat-sifat fitur prosedur / fungsi.)
Namun, jika hasil dari panggilan fungsi tidak diperlukan, itu bisa saja (setidaknya secara logis) diabaikan, dan definisi fungsi / panggilan fungsi harus konsisten dengan definisi prosedur / panggilan prosedur dengan cara ini. Bahasa seperti ALGOL seperti C, C ++ dan Java, semua menyediakan fitur "fungsi" dengan cara ini: dengan menyandikan tipe hasil
void
sebagai kasus khusus fungsi yang tampak seperti prosedur tradisional, tidak perlu menyediakan fitur "prosedur" " terpisah. Ini mencegah beberapa mengasapi dalam desain bahasa.Sejak SICP disebutkan, itu juga diperhatikan bahwa dalam bahasa Skema yang ditentukan oleh R n RS , prosedur mungkin atau mungkin tidak harus kembali hasil perhitungan. Ini adalah gabungan dari "fungsi" tradisional (mengembalikan hasilnya) dan "prosedur" (mengembalikan apa-apa), pada dasarnya sama dengan konsep "fungsi" dari banyak bahasa seperti ALGOL (dan sebenarnya berbagi lebih banyak jaminan seperti evaluasi aplikatif dari operan sebelum panggilan). Namun, perbedaan mode lama masih terjadi bahkan dalam dokumen normatif seperti SRFI-96 .
Saya tidak tahu banyak tentang alasan pasti di balik perbedaan itu, tetapi seperti yang saya alami, tampaknya perancang bahasa akan lebih bahagia tanpa spesifikasi mengasapi saat ini. Artinya, "prosedur" sebagai fitur mandiri tidak perlu.
void
Jenis teknik sudah cukup untuk menandai penggunaan di mana efek samping harus ditekankan. Ini juga lebih alami bagi pengguna yang memiliki pengalaman pada bahasa mirip-C, yang populer lebih dari beberapa dekade. Selain itu, ia menghindari rasa malu dalam kasus-kasus seperti R n RS di mana "prosedur" sebenarnya "fungsi" dalam arti yang lebih luas.Secara teori, suatu fungsi dapat ditentukan dengan tipe unit yang ditentukan sebagai tipe dari hasil pemanggilan fungsi untuk menunjukkan bahwa hasilnya adalah spesial. Ini membedakan prosedur tradisional (di mana hasil panggilan tidak tertarik) dari yang lain. Ada berbagai gaya dalam desain bahasa:
#inert
) juga bekerja.void
ketik bahasa ALGOL-seperti persis contoh dari teknik ini. ISO C11_Noreturn
adalah yang serupa tetapi lebih halus dalam jenis ini.Bacaan lebih lanjut
Sebagai konsep tradisional yang berasal dari matematika, ada banyak ilmu hitam yang kebanyakan orang tidak mau tahu. Sebenarnya, Anda tidak akan mendapatkan semuanya jelas sesuai dengan buku matematika Anda. Buku CS mungkin juga tidak banyak membantu.
Dengan memperhatikan bahasa pemrograman, ada beberapa peringatan:
{{{}}, {}}
...) selain beberapa konteks terbatas .sumber
Dalam sebagian besar konteks: fungsi mengembalikan nilai, sedangkan prosedur tidak. Keduanya adalah potongan kode yang dikelompokkan bersama untuk melakukan hal yang sama.
Dalam konteks pemrograman fungsional (di mana semua fungsi mengembalikan nilai), fungsi adalah objek abstrak:
Di sini, f adalah fungsi yang sama dengan g, tetapi merupakan prosedur yang berbeda.
sumber
Prosedur di dalam kita dapat menggunakan pernyataan DML (Sisipkan / Perbarui / Hapus), tetapi fungsi Di dalam kita tidak dapat menggunakan pernyataan DML.
Prosedur dapat memiliki parameter input \ output, tetapi Function hanya memiliki parameter input.
Kita dapat menggunakan Try-Catch Block dalam Stored Procedure, Tapi Berfungsi Kita tidak bisa menggunakan Try-Catch block.
Kita tidak bisa menggunakan Prosedur Tersimpan dalam pernyataan Pilih, Tapi Dalam Fungsi Kita bisa menggunakan dalam pernyataan Pilih.
Prosedur Tersimpan dapat mengembalikan nilai 0 atau n (maks 1024), Tetapi Fungsi hanya dapat mengembalikan 1 nilai yang wajib.
Stored Procedure tidak bisa dipanggil dari Function, Tapi Kita bisa memanggil function dari Stored Procedure.
Kita bisa menggunakan transaksi dalam Stored Procedure, Tapi dalam fungsi kita tidak bisa menggunakan transaksi.
Kita tidak dapat menggunakan Prosedur Tersimpan dalam pernyataan Sql di bagian mana saja / Di mana / Memiliki / pilih, Tapi dalam fungsi kita dapat menggunakan.
Kami tidak dapat bergabung dengan Prosedur Tersimpan, tetapi kami dapat bergabung dengan fungsi.
untuk lebih lanjut .. klik di sini ... http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html
sumber
Fungsi mengembalikan nilai dan prosedur hanya menjalankan perintah.
Fungsi nama berasal dari matematika. Ini digunakan untuk menghitung nilai berdasarkan input.
Prosedur adalah seperangkat perintah yang dapat dieksekusi secara berurutan.
Di sebagian besar bahasa pemrograman, bahkan fungsi dapat memiliki seperangkat perintah. Karenanya perbedaannya hanya pada pengembalian bagian nilai.
Tetapi jika Anda ingin menjaga fungsi tetap bersih, (lihat saja bahasa-bahasa fungsional), Anda perlu memastikan suatu fungsi tidak memiliki efek samping.
sumber
Fungsi dapat digunakan dalam pernyataan sql sedangkan prosedur tidak dapat digunakan dalam pernyataan sql.
Sisipkan, Perbarui dan Buat pernyataan tidak dapat dimasukkan dalam fungsi tetapi prosedur dapat memiliki pernyataan ini.
Prosedur mendukung transaksi tetapi fungsi tidak mendukung transaksi.
Fungsi harus mengembalikan satu dan hanya satu nilai (yang lain dapat dikembalikan oleh variabel OUT) tetapi prosedur mengembalikan sebanyak set data dan nilai kembali.
Rencana pelaksanaan dari kedua fungsi dan prosedur di-cache, sehingga kinerjanya sama dalam kedua kasus.
sumber
Saya keberatan dengan sesuatu yang terus saya lihat berulang-ulang di sebagian besar jawaban ini, bahwa apa yang membuat fungsi berfungsi adalah mengembalikan nilai.
Fungsi bukan sembarang metode lama yang mengembalikan nilai. Tidak demikian: Agar suatu metode menjadi fungsi nyata, ia harus mengembalikan nilai yang sama selalu diberikan input tertentu. Contoh dari metode yang bukan fungsi adalah
random
metode di sebagian besar bahasa, karena meskipun mengembalikan nilai, nilainya tidak selalu sama.Oleh karena itu fungsi lebih mirip dengan peta (misalnya di mana
x -> x'
untuk fungsi satu dimensi). Ini adalah perbedaan yang sangat penting antara metode dan fungsi reguler karena ketika berhadapan dengan fungsi nyata waktu dan urutan di mana mereka dievaluasi seharusnya tidak pernah menjadi masalah di mana karena ini tidak selalu terjadi dengan non fungsi.Berikut adalah contoh lain dari metode yang bukan fungsi tetapi akan tetap mengembalikan nilai.
Saya lebih jauh menolak gagasan bahwa prosedur tidak mengembalikan nilai. Suatu prosedur hanyalah cara spesifik untuk membicarakan suatu fungsi atau metode. Jadi itu berarti jika metode yang mendasari bahwa prosedur Anda mendefinisikan atau mengimplementasikan mengembalikan nilai, coba tebak apa prosedur yang mengembalikan nilai. Ambil contoh cuplikan berikut dari SICP :
Pernahkah Anda mendengar tentang prosedur rekursif akhir-akhir ini? Mereka berbicara tentang fungsi rekursif (fungsi nyata) dan mengembalikan nilai dan mereka menggunakan kata "prosedur". Jadi apa bedanya, kalau begitu?
Nah cara lain untuk memikirkan suatu fungsi (selain makna yang disebutkan di atas) adalah sebagai representasi abstrak dari cita-cita seperti angka 1. Suatu prosedur adalah implementasi aktual dari hal itu. Saya pribadi berpikir mereka dapat dipertukarkan.
(Catatan, jika Anda membaca bab itu dari tautan yang saya berikan, Anda mungkin menemukan bahwa konsep yang lebih sulit untuk dipahami bukan perbedaan antara fungsi dan prosedur, tetapi proses dan prosedur. Apakah Anda tahu bahwa prosedur rekursif dapat memiliki proses berulang?)
Analog untuk prosedur adalah resep. Sebagai contoh; misalkan Anda memiliki mesin bernama mesin
make-pies
ini mengambil bahan(fruit, milk, flower, eggs, sugar, heat)
dan mesin ini mengembalikan apie
.Representasi mesin ini mungkin terlihat seperti
Tentu saja itu bukan satu-satunya cara untuk membuat kue.
Dalam hal ini kita dapat melihat bahwa:
Analogi itu baik-baik saja tetapi rusak ketika Anda mempertimbangkan bahwa ketika Anda berurusan dengan program komputer semuanya adalah abstraksi. Jadi tidak seperti dalam hal resep untuk mesin kami membandingkan dua hal yang merupakan abstraksi sendiri; dua hal yang mungkin juga merupakan hal yang sama. Dan saya berpendapat bahwa mereka (untuk semua maksud dan tujuan) adalah hal yang sama.
sumber
Dalam konteks db : Prosedur tersimpan adalah rencana eksekusi yang dikompilasi di mana fungsinya tidak.
sumber
Dalam hal С # / Java, fungsi adalah blok kode, yang mengembalikan nilai tertentu, tetapi prosedur adalah blok kode yang mengembalikan batal (tidak ada). Dalam C # / Java kedua fungsi dan prosedur lebih sering disebut metode saja .
sumber
Prosedur: 1. Prosedur adalah kumpulan pernyataan yang mendefinisikan perhitungan parameter. 2. Prosedur tidak dapat mengembalikan nilai.
3. Prosedur tidak dapat dipanggil dari fungsi.
Fungsi 1.Fungsi secara struktural menyerupai prosedur tetapi secara semantik dimodelkan pada fungsi matematika. 2.Ini dapat mengembalikan nilai 3.Fungsi dapat dipanggil dari prosedur.
sumber
Prosedur dan fungsi sama-sama subrutin satu - satunya perbedaan di antara mereka adalah bahwa prosedur mengembalikan beberapa (atau setidaknya bisa melakukan) nilai sedangkan fungsi hanya dapat mengembalikan satu nilai (inilah sebabnya notasi fungsi digunakan dalam matematika karena biasanya hanya satu nilai yang ditemukan pada satu waktu tertentu) walaupun beberapa bahasa pemrograman tidak mengikuti aturan ini ini adalah definisi sebenarnya
sumber
return
apa - apa. Anda sedang berbicara tentang efek samping, yang dimungkinkan dengan keduanya (jika diizinkan oleh bahasa).