Di mana semua pola desain pemrograman fungsional? [Tutup]


75

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?


6
Pasti ada pola desain fungsional - ambil memoisasi atau monad misalnya - Saya juga bertanya-tanya apakah ada yang telah mengumpulkannya di satu tempat ...
FinnNk

2
FinnNk Monad lebih dari tipe kelas daripada pola desain ^ _ ^
alternatif

Untuk haskell, Gabriel Gonzalez memiliki beberapa posting blog, misalnya haskellforall.com/2012/08/the-category-design-pattern.html
bennofs


1
Pengurangan peta adalah satu. Saya kecewa tidak ada daftar pola yang baik
Sridhar Sarnobat

Jawaban:


48

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.


41
Saya tidak yakin saya akan setuju bahwa pola desain tidak berlaku untuk FP. FP masih menyajikan masalah-masalah umum yang diselesaikan dengan cara-cara tertentu yang umum. Masalah yang berbeda dengan yang diselesaikan di OO, tetapi masih masalah. Saya pikir itu mungkin hanya sesuatu yang kurang diperhatikan daripada di OO, karena FP kurang umum di dunia komersial saat ini.
d11wtq

22
Untuk mengklaim bahwa pola desain tidak ada dalam pemrograman fungsional adalah informasi yang salah. Contoh tandingan paling mudah adalah monad. Anda tidak perlu menggunakan monad dalam pemrograman fungsional, tetapi itu adalah pola yang sangat umum diikuti orang untuk memfasilitasi aplikasi pemrograman fungsi murni. Yang pada intinya adalah definisi pola desain.
voidvector

3
Pola desain berlaku untuk semua aktivitas desain, baik pemrograman maupun desain rumah. Bahkan, konsep bahasa pola berasal dari arsitektur: en.wikipedia.org/wiki/A_Pattern_Language .
BobDalgleish

2
Hmm. Aliran yang dapat diamati, Validasi Kereta Api, dan neraka, hampir setiap monad merupakan pola desain, bukan?
Chet

2
@voidvector Monads bukan hanya pola desain. Dalam FP, monad digunakan sebagai fungsi antara sistem tipe, dan konsep itu sendiri berasal dari Kategori Teori, cabang matematika. Mereka digunakan untuk menggambarkan jenis hubungan tertentu antara struktur aljabar pada umumnya. Akan lebih akurat untuk mengatakan pemrograman fungsional adalah dattern desain untuk memfasilitasi penggunaan matematika dalam pemrograman.
John Cramerus


13

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.


9

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:

  • Negara / Acara
  • Konsekuensi
  • Aki
  • Kurangi / Gabungkan
  • Ekspansi Rekursif
  • Saluran pipa
  • Pembungkus
  • Token
  • Pengamat
  • Strategi

6

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.


-3

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 .


1
Buku Okasaki adalah setara dengan bagian struktur data dari banyak struktur data dan buku algoritma yang biasanya hanya mempertimbangkan struktur data yang bisa berubah.
Pemrogram

1
Saya tidak berpikir menyamakan struktur data dengan pola desain sesuai dengan tagihan. Ini tidak seperti programmer OO hanya mengayun-ayunkan lengan mereka sampai definisi kelas yang tepat muncul.
davidk01

Ya, buku Okasaki berada pada level yang lebih rendah dari pola desain.
FinnNk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.