Dalam situasi apa saya harus memilih untuk menggunakan bahasa pemrograman fungsional daripada bahasa berorientasi objek yang lebih verbose seperti C ++, C # atau Java?
Saya mengerti apa itu pemrograman fungsional, yang tidak benar-benar saya mengerti adalah untuk jenis masalah apa apakah itu solusi yang tepat?
functional-programming
language-agnostic
Alex Baranosky
sumber
sumber
Jawaban:
Bahasa fungsional, menurut saya, bagus terutama untuk dua hal: Game AI dan perhitungan matematika. Ini bagus dalam game AI karena manipulasi daftar yang bagus (setidaknya di Lisp dan Skema), dan untuk perhitungan matematika karena sintaksnya. Skema, Lisp, dan Haskell memiliki sintaks yang membuat perhitungan matematika mudah dibaca. Hal terakhir yang harus saya tambahkan adalah bahwa bahasa fungsional adalah bahasa yang sangat menyenangkan. Kursus Skema saya adalah salah satu kursus yang paling saya sukai.
sumber
Saya telah melakukan beberapa penelitian tentang ini sendiri dan berpikir saya dapat menambahkan CONCURRENCY ke daftar alasan untuk menggunakan bahasa fungsional. Lihat di beberapa titik dalam waktu dekat kecepatan prosesor tidak akan dapat meningkat menggunakan teknologi cpu yang sama. Fisika arsitektur tidak mengizinkannya.
Jadi di situlah pemrosesan bersamaan masuk.
Sayangnya sebagian besar bahasa OOP tidak dapat memanfaatkan beberapa prosesor sekaligus karena saling ketergantungan antar data.
Dalam bahasa pemrograman fungsional murni, komputer dapat menjalankan dua (atau lebih) fungsi sekaligus karena fungsi tersebut tidak mengubah informasi status luar.
Berikut adalah artikel bagus tentang pemrograman fungsional yang mungkin Anda sukai.
sumber
Seorang teman saya mengutip salah satu profesor kampusnya yang mengatakan sesuatu seperti berikut:
Jawaban saya adalah bahwa FP adalah pendekatan yang benar-benar layak untuk pemrograman dengan berbagai aplikasi seperti OO. Seperti halnya diskusi pilihan bahasa pemrograman, saya pikir pertanyaan yang lebih penting adalah:
Mengenai pertanyaan pertama, jika Anda melakukan ini terutama untuk nilai pembelajaran, saya sarankan untuk melihat Haskell , karena berbagai macam materi pendukung (buku, artikel, komunitas aktif, dll.)
Mengenai pertanyaan kedua, Haskell memiliki berbagai pustaka yang bagus (meskipun beberapa lebih matang daripada yang lain), tetapi Scala (bahasa fungsional-OO hibrida yang berjalan di JVM) memiliki kelebihan yaitu Anda dapat secara bertahap beralih ke gaya fungsional , dan Anda memiliki berbagai pustaka yang dapat diakses Java yang tersedia untuk Anda.
sumber
Praktis semua yang bisa Anda lakukan di PP bisa dilakukan di FP, dan hal yang sama sebaliknya. Ini hanyalah cara lain untuk membuat kode sesuatu — perspektif lain tentang masalah dan cara berbeda untuk menyelesaikannya.
Namun, karena tidak banyak orang yang menggunakan FP, masalahnya lebih pada kurangnya perpustakaan yang baik, portabilitas / pemeliharaan (karena pengelola memiliki kesempatan lebih baik untuk memahami sesuatu yang ditulis dalam C ++ daripada Skema), dan kurangnya dokumentasi dan komunitas. Saya tahu ADA beberapa dokumen, namun, bandingkan dengan C ++, C # atau Java dan Anda akan mengerti maksud saya.
Namun, jika Anda benar-benar ingin melakukan FP, Anda dapat menggunakan gaya ini bahkan di C ++ dan C #. Tentu saja, ini tidak akan menjadi 100% FP jika Anda menggunakan pustaka standar. Sayangnya, menurut saya C # tidak dioptimalkan untuk digunakan dengan pemrograman fungsional dan mungkin akan menimbulkan banyak masalah kinerja.
Ini lebih merupakan posting subjektif, apa yang saya pikirkan tentang FP. Ini bukan deklarasi yang ketat.
sumber
Bahasa fungsional bagus dalam banyak situasi. Itu tergantung pada pustaka bahasa fungsional tertentu.
Bagaimana Anda menjawab pertanyaan "Kapan menggunakan bahasa pemrograman berorientasi objek?"?
sumber
Meskipun ini adalah pertanyaan subjektif, saya hanya ingin menambahkan bahwa bahasa fungsional banyak digunakan untuk mengurai bahasa khusus domain ; sifat fungsional cocok untuk mengurai tata bahasa.
sumber
Dari apa yang saya lihat, ini lebih merupakan masalah rasa daripada fungsionalitas (tidak ada permainan kata-kata). Sebenarnya tidak ada apa-apa tentang gaya bahasa yang membuatnya secara inheren lebih baik atau lebih buruk pada tugas-tugas tertentu.
sumber
Secara umum, gunakan bahasa yang paling mudah digunakan untuk mengungkapkan solusi suatu masalah. Untuk pemrograman fungsional, ini adalah saat solusi untuk suatu masalah dengan mudah diekspresikan dalam bentuk fungsi , maka namanya. Umumnya bagus untuk operasi matematika, AI, pencocokan pola; secara umum segala sesuatu yang dapat dipecah menjadi seperangkat aturan yang harus diterapkan untuk mendapatkan jawaban. Anda hanya dapat benar-benar menentukan bahasa "terbaik" untuk digunakan setelah Anda cukup menganalisis masalah Anda. Di sinilah pseudo-code berguna. Jika Anda menemukan diri Anda menulis pseudo-code yang terlihat seperti FP, gunakan FP.
Tentu saja, semua bahasa pemrograman lengkap secara fungsional setara, jadi tidak masalah yang mana yang Anda pilih dalam hal masalah apa yang dapat Anda selesaikan. Efek utamanya adalah dalam hal efisiensi dan akurasi pengkodean, dan kemudahan pemeliharaan.
Perhatikan juga bahwa dimungkinkan untuk meniru FP dalam bahasa OO melalui API yang dirancang dengan cerdik. Misalnya, saya telah melihat banyak perpustakaan Java (JMock adalah salah satu contoh) yang menggunakan rangkaian metode untuk mensimulasikan FP DSL. Kemudian Anda akan melihat konstruksi seperti:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
Ini pada dasarnya membangun fungsi yang dievaluasi untuk menentukan apakah beberapa urutan panggilan pada objek tiruan sudah benar. (contoh dicuri dari http://www.jmock.org/yoga.html )
Sintaks mirip FP lainnya dalam bahasa OO lainnya adalah penggunaan closure, seperti di Ruby.
sumber