Literatur pemrograman OO penuh dengan pola desain. Sebagian besar buku tentang pemrograman berorientasi objek mendedikasikan satu atau dua bab untuk merancang pola seperti pabrik dan dekorator. Jadi, apa pola yang setara dalam bahasa fungsional dan mengapa belum ada yang menulis buku tentang mereka? Apakah ada sesuatu yang istimewa tentang bahasa fungsional yang meniadakan kebutuhan akan pola desain?
books
design-patterns
functional-programming
davidk01
sumber
sumber
Jawaban:
OO dan pemrograman fungsional adalah dua paradigma pemrograman yang sangat berbeda, dan pola desain (DP) adalah bagian penting dari desain dan pemrograman OO. DP tidak memiliki peran seperti itu dalam pemrograman fungsional.
Bahkan bisa dikatakan, bahwa DP tidak diperlukan dalam pemrograman fungsional - tidak ada gatal yang menyembuhkan DP.
Orang bisa berpendapat bahwa pola desain adalah tanda fitur yang hilang dalam bahasa pemrograman.
Peter Norvig menemukan bahwa 16 dari 23 pola dalam buku Pola Desain adalah " r tidak terlihat atau sederhana " di Lisp atau Dylan.
"Banyak pola menyiratkan orientasi objek atau keadaan yang secara umum bisa berubah, dan karenanya mungkin tidak berlaku dalam bahasa pemrograman fungsional, di mana data tidak dapat diubah atau diperlakukan seperti itu." - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
sumber
Jeremy Gibbons sedang menulis buku. Sampai selesai, Anda dapat membaca blognya, Patterns in Functional Programming . Dia merekomendasikan membaca posting-postingnya dari terlama hingga terbaru.
Jelajahi publikasi miliknya juga. Dia membahas Gang of Four pola dalam Pola Desain sebagai Program Datatype-Generik Orde Tinggi dan menggambarkan pola pemrograman dengan persamaan rekursif dalam Origami Programming (lipatan dan lipatan).
sumber
Fakta sederhananya adalah bahwa banyak Pola OO akan dianggap Idiom dalam bahasa fungsional (terutama pola GoF asli). Misalnya pola Iterator (built-in ke bahasa seperti C # sekarang) tidak diperlukan dalam Lisp atau ML yang memiliki operator urutan.
Banyak pola yang kita gunakan dalam sistem OO ada untuk membantu kita mendapatkan "non esensial" sehingga kita dapat fokus pada pengkodean objek. Dengan kata lain, polanya adalah solusi untuk bagian aplikasi yang tidak menarik. Kita harus meningkatkan pola untuk memenuhi kebutuhan umum yang telah diselesaikan sebelumnya (seperti pola dalam Pola Fowlers Arsitektur Aplikasi Perusahaan untuk menangani hal-hal seperti transmisi basis data, atau Pola xUnit untuk meningkatkan pengujian unit Anda) sehingga kami dapat fokus pada menambah nilai bisnis untuk aplikasi.
Saya yakin bahwa di luar kekhasan pola GoF, ada pola desain yang akan berlaku untuk pemrograman fungsional juga. Masalahnya, OO adalah paradigma dominan. Menulis buku pola yang menargetkan pengembang fungsional ... terus terang tidak akan mendapatkan lampu hijau dari penerbit. Itulah intinya. Tidak ada cukup pasar untuk Pola Fungsional untuk memiliki sejumlah besar buku yang didedikasikan untuk topik ini.
sumber
Pembicaraan yang baik (~ 45 menit) tentang topik ini oleh Stuart Sierra:
http://www.infoq.com/presentations/Clojure-Design-Patterns
Tidak harus mengikat dan berwibawa, tetapi saya mengenali sejumlah contohnya dari pengalaman saya sendiri menggunakan FP untuk analisis data.
Contoh ditulis dalam Clojure, tetapi kemungkinan berlaku untuk bahasa FP apa pun. Nama-nama yang dia berikan pada pola yang dicakupnya adalah:
sumber
Jika Anda benar-benar tertarik mempelajari pola desain tidak jauh dari Haskell. Jika Anda meluangkan waktu untuk mempelajari bahasa dengan cara yang sulit Anda akan mengalami dan merasa nyaman dengan sebagian besar pola dasar - mereka dimasukkan ke dalam bahasa.
Jangan lewatkan monad. Ada banyak penjelasan yang bertele-tele di luar sana dan perlu dilakukan beberapa untuk mendapatkan ide-ide meresap, tetapi jika Anda terus menyumbat, akhirnya itu akan menyingsingkan pada Anda dan Anda akan kagum pada berapa banyak pola desain yang bisa dibuat. membangun di atas abstraksi / antarmuka yang satu ini.
Setelah Anda grok Haskell, Anda akan memiliki cukup dari persenjataan FP yang Anda inginkan menjadi berbahaya. Intinya adalah, teruskan sampai Anda mendapatkannya. Tidak ada jalan pintas.
sumber
Sejauh metodologi desain untuk FP adalah mendesain tipe Anda untuk secara akurat mencerminkan ruang masalah dan implementasinya akan mengikuti secara otomatis, padanan FP dari sebuah buku tentang pola desain adalah sesuatu seperti Puruct Functional Data Structures dari Chris Okasaki .
sumber