Apa perbedaan antara pemrograman prosedural dan fungsional pemrograman?

I'telah membaca artikel Wikipedia untuk investasi pemrograman prosedural dan pemrograman fungsional, tapi saya'm masih sedikit bingung. Seseorang bisa mendidih itu ke inti?

Larutan

Bahasa fungsional (idealnya) memungkinkan anda untuk menulis sebuah fungsi matematika, yaitu fungsi yang diperlukan n argumen dan mengembalikan nilai. Jika program ini dijalankan, fungsi ini secara logis dievaluasi sesuai kebutuhan.1

Bahasa prosedural, di sisi lain, melakukan serangkaian sequential langkah-langkah. (Ada's cara mengubah berurutan logika ke logika fungsional yang disebut kelanjutan lewat gaya.)

Sebagai akibatnya, murni fungsional program selalu menghasilkan nilai yang sama untuk input, dan urutan evaluasi tidak didefinisikan dengan baik; yang berarti bahwa nilai-nilai yang tidak pasti seperti input pengguna atau nilai acak yang sulit untuk model di murni fungsional bahasa.


1 Seperti segala sesuatu yang lain di jawaban ini, itu generalisasi. Properti ini, mengevaluasi perhitungan ketika hasilnya lebih dibutuhkan daripada secara berurutan di mana itu disebut, adalah yang dikenal sebagai "kemalasan". Tidak semua bahasa-bahasa fungsional yang benar-benar universal malas, atau kemalasan dibatasi untuk pemrograman fungsional. Sebaliknya, keterangan yang diberikan di sini menyediakan "mental framework" untuk berpikir tentang gaya pemrograman yang berbeda yang tidak berbeda dan berlawanan kategori melainkan cairan ide-ide.

Komentar (4)

Dalam ilmu komputer, pemrograman fungsional adalah sebuah paradigma pemrograman yang memperlakukan perhitungan sebagai evaluasi fungsi matematika dan menghindari keadaan dan bisa berubah data. Ini menekankan penerapan fungsi, berbeda dengan pemrograman prosedural gaya yang menekankan perubahan dalam negara.

Komentar (1)

Saya percaya bahwa prosedural/fungsional/tujuan pemrograman adalah tentang cara pendekatan masalah.

Gaya pertama akan merencanakan segala sesuatu dalam langkah-langkah, dan memecahkan masalah dengan menerapkan satu langkah (prosedur) pada suatu waktu. Di sisi lain, pemrograman fungsional akan menekankan membagi-dan-menaklukkan pendekatan, di mana masalah ini dibagi menjadi sub-masalah, kemudian masing-masing sub-masalah ini diselesaikan (membuat fungsi untuk memecahkan sub masalah) dan hasil yang dikombinasikan untuk membuat jawaban untuk seluruh masalah. Terakhir, Tujuan pemrograman akan meniru dunia nyata dengan membuat sebuah mini-dunia di dalam komputer dengan banyak benda, masing-masing memiliki (agak) karakteristik yang unik, dan berinteraksi dengan orang lain. Dari interaksi tersebut hasilnya akan muncul.

Masing-masing gaya pemrograman memiliki kelebihan dan kelemahan. Oleh karena itu, melakukan sesuatu seperti "murni pemrograman" (yaitu prosedural murni - tidak ada yang melakukan ini, dengan cara yang aneh - atau murni fungsional atau murni obyektif) adalah sangat sulit, jika tidak mustahil, kecuali beberapa masalah mendasar yang dirancang khusus untuk menunjukkan keuntungan dari gaya pemrograman (oleh karena itu, kita menyebut orang-orang yang suka kemurnian "weenie" :D).

Kemudian, dari gaya-gaya, kami memiliki bahasa pemrograman yang dirancang untuk dioptimalkan untuk beberapa gaya masing-masing. Misalnya, Perakitan adalah semua tentang prosedural. Oke, yang paling awal bahasa prosedural, tidak hanya Asm, seperti C, Pascal, (dan Fortran, aku mendengar). Kemudian, kita semua telah terkenal Jawa di tujuan sekolah (Sebenarnya, Java dan C# juga di kelas yang disebut "money-oriented," tapi itu adalah subjek untuk diskusi yang lain). Juga tujuannya adalah Smalltalk. Dalam fungsional sekolah, kita akan memiliki "hampir fungsional" (beberapa menganggap mereka untuk menjadi tidak murni) Cadel keluarga dan ML keluarga dan banyak "murni fungsional" Haskell, Erlang, dll. By the way, ada banyak umum bahasa seperti Perl, Python, Ruby.

Komentar (0)

Untuk memperluas Konrad's komentar:

Sebagai akibatnya, murni fungsional program selalu menghasilkan nilai yang sama untuk input, dan urutan evaluasi tidak didefinisikan dengan baik;

Karena ini, fungsional kode ini umumnya lebih mudah untuk memparalelkan. Sejak ada (umumnya) tidak ada efek samping fungsi, dan mereka (umumnya) hanya bertindak atas argumen mereka, banyak concurrency masalah pergi.

Pemrograman fungsional adalah juga digunakan ketika anda perlu untuk menjadi mampu membuktikan kode anda benar. Ini adalah jauh lebih sulit untuk dilakukan dengan pemrograman prosedural (tidak mudah dengan fungsional, tapi masih lebih mudah).

Disclaimer: saya belum't digunakan pemrograman fungsional dalam beberapa tahun, dan baru saja mulai melihat hal itu lagi, jadi aku mungkin tidak akan benar-benar benar di sini. :)

Komentar (0)

Bahasa prosedural cenderung untuk melacak negara (menggunakan variabel) dan cenderung untuk mengeksekusi sebagai urutan langkah-langkah. Murni fungsional bahasa don't melacak negara, menggunakan nilai-nilai abadi, dan cenderung untuk mengeksekusi sebagai rangkaian dari ketergantungan. Dalam banyak kasus status call stack akan menahan informasi yang akan setara dengan apa yang akan disimpan dalam variabel keadaan di kode prosedural.

Rekursi adalah contoh klasik dari gaya fungsional pemrograman.

Komentar (1)

Untuk memperluas Konrad's komentar:

dan urutan evaluasi tidak didefinisikan

Beberapa fungsional bahasa memiliki apa yang disebut Malas Evaluasi. Yang berarti fungsi ini tidak dilaksanakan sampai dengan nilai yang dibutuhkan. Sampai saat itu fungsi itu sendiri adalah apa yang diedarkan.

Bahasa prosedural adalah langkah 1 langkah 2 langkah 3... jika pada langkah 2 yang anda katakan tambahkan 2 + 2, itu tidak benar kemudian. Dalam malas evaluasi anda akan mengatakan tambahkan 2 + 2, tetapi jika hasilnya tidak pernah digunakan, tidak pernah melakukan penambahan.

Komentar (0)