Pemrograman fungsional adalah paradigma deklaratif. Salah satu kekuatan dengan FP adalah bahwa efek samping dihindari. Dikatakan bahwa untuk beberapa masalah, FP tidak cocok.
Untuk masalah umum apa yang tidak cocok untuk pemrograman fungsional?
Pemrograman fungsional adalah paradigma deklaratif. Salah satu kekuatan dengan FP adalah bahwa efek samping dihindari. Dikatakan bahwa untuk beberapa masalah, FP tidak cocok.
Untuk masalah umum apa yang tidak cocok untuk pemrograman fungsional?
Jawaban:
Aplikasi yang sifatnya sangat stateful. Video game adalah contoh yang baik karena mereka memodelkan dunia nyata. Lebih masuk akal untuk berpikir tentang memodifikasi keadaan dunia alih-alih membangun kembali dari keadaan sebelumnya setiap kali ada perubahan.
Contoh konkret akan mengubah kesehatan monster setelah ditembak. Jauh lebih masuk akal untuk mengubah kesehatannya daripada menggantinya dengan monster yang sama sekali baru yang sama dalam segala hal kecuali sekarang kesehatannya kurang. Perubahan semacam ini menghasilkan hampir semua hal di dunia game, dan melakukan ini dengan cara fungsional murni tidak terlalu intuitif. Saya membayangkan mungkin ada beberapa hukuman kinerja yang signifikan, setidaknya jika Anda melakukannya dalam bahasa yang murni fungsional.
(Sebagai catatan, beberapa masalah dalam game sangat cocok untuk pemrograman fungsional, seperti AI. Bahasa hybrid fungsional / imperatif akan sangat cocok untuk kasus-kasus itu.)
Pemrograman tertanam waktu nyata adalah semua tentang efek samping. Berinteraksi dengan io digital dan analog, timer, port serial dan paralel, semuanya menarik dilakukan dengan memanggil fungsi dengan efek samping.
Saya berpendapat bahwa pemrograman GUI tidak cocok untuk pemrograman fungsional. GUI umumnya sangat stateful, dan jauh lebih mudah untuk memodelkan / mengelolanya menggunakan status daripada menggunakan efek samping gratis. Tentunya dimungkinkan untuk menggunakan bahasa pemrograman fungsional untuk GUI ... tapi mungkin itu bukan ide yang baik.
Seperti disebutkan dalam jawaban lain, gim seringkali lebih mudah dikelola dengan melacak keadaan, dan meskipun Anda dapat menulis gim dalam bahasa fungsional, gim seringkali lebih mudah dan lebih efisien untuk melakukannya dalam bahasa "keadaan" (yaitu, berorientasi objek bahasa).
Aplikasi bisnis berbasis data. Antarmuka pengguna dan operasi data sederhana tidak perlu FP.
filter
, reduce
dan map
. Lemparkan dalam beberapa sort
, partition
, groupBy
. Bagaimanapun, bahasa pemrograman yang paling banyak digunakan untuk menulis aplikasi semacam itu adalah Excel, yang merupakan bahasa fungsional.
Anda tidak dapat dengan mudah mengabaikan masalah yang ditetapkan karena tidak cocok untuk pemrograman fungsional per se.
Banyak tergantung pada bahasa aktual yang digunakan untuk pemrograman fungsional dan fitur-fiturnya.
Salah satu contoh adalah Erlang yang telah disebutkan untuk embedded-system realtime.
Keutuhan negara juga bukan kriteria yang baik terhadap pemrograman fungsional, ada beberapa cara yang berhasil diterapkan dalam bahasa pemrograman fungsional untuk menangani hal ini.
Efek samping juga sering disebutkan terhadap pemrograman fungsional. Setiap program yang tidak sepenuhnya solipsistik memiliki efek samping. Jadi setiap bahasa FP dunia nyata memiliki beberapa cara untuk mengatasi hal ini, hanya masalah seberapa elegannya merangkum efek samping dunia.
Tidak perlu efek samping yang sewenang-wenang seperti variabel global sama sekali.
Tetapi ada set masalah yang membuatnya lebih mudah untuk masuk ke pemrograman fungsional karena mereka tidak memutar cara akrab Anda melihat masalah sebanyak itu. Tetapi begitu Anda berhasil berfikir fungsional semakin banyak set masalah terbuka untuk efek samping yang lebih sedikit.
Bahkan ketika memprogram C selalu merupakan ide yang bagus untuk mengurangi efek samping sewenang-wenang seperti variabel global sebanyak mungkin.