Saya telah memprogram sedikit Haskell dan Prolog sebagai bagian dari beberapa program uni, tetapi hanya itu saja. Dan saya belum pernah melihatnya digunakan di industri (bukan berarti saya sudah memiliki banyak pengalaman kerja untuk memulai, tetapi saya belum pernah melihat iklan di mana Anda harus mengetahuinya).
Jadi haruskah kita menggunakan bahasa pemrograman fungsional dan / atau logika lebih sering? Apakah ada kelebihan atau kekurangan untuk menggunakan atau tidak menggunakannya?
Pertama-tama - karena kompiler harus melakukan lebih banyak. Jika Anda ingin membuat compiler imperatif, Anda hampir dapat melakukan transformasi 1-1 menjadi assembler dan kode yang dihasilkan akan memiliki kecepatan yang dapat diterima (tentu - mungkin ada banyak yang harus dilakukan tetapi kompilasi 'pada dasarnya' 1-1 kompilasi + optimalisasi). Kompilator fungsional HARUS menangani inlineing berat, optimalisasi panggilan ekor dll. Oleh karena itu implementasi bahasa fungsional jauh lebih lambat daripada C / C ++ / ... di masa lalu (namun mereka mendapatkan kecepatan lebih banyak setiap iterasi karena kompiler semakin baik).
Kedua - programmer sangat terbiasa menyatakan bahwa mereka tidak dapat 'menerima' "tidak ada pendekatan ... menyatakan". Tentu - kurangnya negara tidak berguna di setiap kondisi tetapi kurangnya negara (global) tidak berarti kurangnya negara setempat.
Ketiga - pemrograman fungsional tidak memiliki cerita yang bagus di belakangnya. OOP memiliki cerita yang bagus ketika objek memetakan ke kata benda dan seberapa intuitifnya. Setelah itu Anda tahu bahwa itu tidak begitu sederhana karena Anda tidak dapat membuat kelas
Manager
sebagai subclass dariEmployee
yangEmployee
mungkin akan mempromosikan untukManager
dan Anda harus bermain-main dekorator. Program-program fungsional memiliki cerita dalam matematika yang IMHO lebih bermanfaat tetapi kurang berharga.Sebagai internal dari perspektif komputer - tidak ada perbedaan antara komputasi paralel dan bersamaan banyak programmer tidak melihat perbedaan dan banyak bahasa memiliki primitif yang sama untuk menangani keduanya. Berkat kurangnya keadaan lokal dan utas yang ringan dalam bahasa pemrograman fungsional, paralelisasi algoritma jauh lebih mudah. Namun pemrograman konkuren tidak dibuat secara otomatis lebih mudah karena konkurensi adalah tentang keadaan global.
Akhirnya - ada banyak program lama yang ditulis dengan gaya inperatif. Bahkan porting dari bahasa imperatif ke bahasa imperatif jauh lebih sederhana daripada fungsional.
Sejauh yang saya tahu bank investasi mulai merangkul program fungsional secara internal sehingga mereka masuk ke XXI c. (di area yang sangat penting meskipun tersembunyi) - sehingga mereka mendapatkan momentum.
PS. Sementara saya percaya bahwa program fungsional "lebih baik" dalam arti mereka menyembunyikan kompleksitas lebih baik daripada pendekatan lain itu tidak berarti bahwa tidak ada area seperti skrip yang secara inheren penting.
sumber
Bahasa pemrograman adalah bentuk representasi informasi. Dalam hal ini instruksi untuk diikuti komputer. Namun, representasi juga penting bagi audiens target (yaitu para programmer).
Konsep fungsional / logis tidak seperti yang biasa digunakan dalam kehidupan sehari-hari sebagai konsep prosedural. Jika Anda membaca instruksi (yaitu cara menggunakan televisi, pemutar dvd, atau membuat furnitur dari IKEA), sebagian besar ditulis dengan cara prosedural (meskipun dalam bahasa alami).
Oleh karena itu, banyak orang yang tidak terlalu terlibat dalam matematika atau sains sering jauh lebih akrab dengan konsep prosedural seperti itu daripada yang logis atau fungsional.
Saya pikir ini memiliki banyak dampak dalam pemilihan kelas bahasa pemrograman yang digunakan. Pada akhirnya, serangkaian masalah yang dapat dipecahkan dengan bahasa pemrograman seperti itu hampir sama (selama mereka semua turing lengkap).
Namun, banyak bahasa prosedural memperoleh lebih banyak dan lebih banyak aspek dari konsep lain. Python dapat melakukan lambda-kalkulus dan penutupan, ruby juga. Javascript yang sering digunakan dalam industri sebenarnya adalah bahasa fungsional (bahkan kebanyakan orang "menyalahgunakan" adalah dengan menggunakannya lebih dalam cara prosedural). Oleh karena itu, sebenarnya tugas programmer untuk menggunakan fitur-fitur tersebut dengan tepat di tempat yang sesuai.
sumber