it-swarm.asia

Tüm fonksiyonel programlama tasarım kalıpları nerede?

OO programlama literatürü tasarım desenleriyle doludur. Nesneye yönelik programlama hakkındaki çoğu kitap, fabrikalar ve dekoratörler gibi kalıplar tasarlamak için bir veya iki bölüm ayırır. Peki, işlevsel dillerdeki eşdeğer kalıplar nelerdir ve neden onlar hakkında henüz bir kitap yazmadı? İşlevsel diller hakkında tasarım kalıplarına olan ihtiyacı ortadan kaldıran özel bir şey var mı?

76
davidk01

OO ve fonksiyonel programlama iki farklı programlama paradigmasıdır ve tasarım modelleri (DP) OO tasarım ve programlamanın önemli bir parçasıdır. DP'nin fonksiyonel programlamada böyle bir rolü yoktur.

Hatta DP'nin fonksiyonel programlamada gerekli olmadığını bile söyleyebiliriz - DP'nin iyileştirdiği kaşıntı yoktur.

52
Maglob

Jeremy Gibbons kitabı yazıyor. Tamamlanıncaya kadar, blogunu okuyabilirsiniz, Fonksiyonel Programlamadaki Kalıplar . Yazılarını en eskiden en yeniye doğru okumanızı önerir.

Onun yayınları da göz atın. Tasarım Desenlerini Yüksek Dereceli Veri Türü-Genel Programlar 'da kapsar ve özyinelemeli programlama modellerini açıklar Origami Programlama (katlanır ve açılır) içindeki denklemler.

68
Corbin March

Basit gerçek şu ki, birçok OO Desenler işlevsel dillerdeki deyimler (özellikle orijinal GoF kalıpları) olarak düşünülecektir. Örneğin, Yineleyici kalıbı (şimdi C # gibi diller için yerleşik) sadece ' t Dizi operatörlerine sahip bir LISP veya ML'de gereklidir.

O-O sistemlerinde kullandığımız birçok desen, "temel olmayanları" ortadan kaldırmamıza yardımcı olmak için oradadır, böylece nesneleri kodlamaya odaklanabiliriz. Başka bir deyişle, desenler uygulamanın ilginç olmayan kısımlarına çözümlerdir. Daha önce çözülmüş olan genel ihtiyaçları ele almak için kalıplardan yararlanmalıyız (iş değeri eklemeye odaklanabilmemiz için veritabanı iletimi gibi şeylerle başa çıkmak için Fowlers Enterprise Application Architecture kalıpları veya birim testinizi artırmak için xUnit Kalıpları gibi kalıplar gibi). uygulama için.

Eminim GoF modellerinin özelliklerinin ötesinde, fonksiyonel programlamaya da uygulanacak tasarım desenleri vardır. Mesele şu ki, O-O baskın paradigma. İşlevsel geliştiricileri hedefleyen bir desen kitabı yazmak ... açıkçası bir yayıncıdan yeşil ışık almayacak. İşte bununla kaynaşır. İşlevsel Desenler için konuyla ilgili önemli sayıda kitap bulundurmak için yeterli pazar yoktur.

13
Michael Brown

Stuart Sierra'nın bu konuyla ilgili güzel bir konuşma (~ 45 dak.):

http://www.infoq.com/presentations/Clojure-Design-Patterns

Mutlaka bağlayıcı ve yetkili değil, ancak kendi deneyimlerimden birkaç örneğini FP veri analizi için) kullanarak tanıdım.

Clojure'da yazılmış ancak büyük olasılıkla herhangi bir FP diline uygulanabilir) Örnekler. Kapladığı kalıplara verdiği adlar şunlardır:

  • Devlet/Etkinlik
  • Sonuçlar
  • Akümülatör
  • Küçültme/birleştirin
  • Yinelemeli Genişleme
  • Boru hattı
  • Sarıcı
  • Jeton
  • Gözlemci
  • Strateji
11
Aaron Johnson

Tasarım desenlerini öğrenmekle gerçekten ilgileniyorsanız, Haskell'den başka bir yere bakmayın. Eğer dili zor yoldan öğren için zaman ayırırsanız, temel kalıpların çoğuyla karşılaşırsınız ve rahat edersiniz - bunlar dilde pişirilir.

Monadları atlamayın. Dışarıda bir sürü uzun soluklu açıklama var ve fikirlerin batırılması biraz zaman alıyor, ancak takılmaya devam ederseniz, sonunda sizi şaşıracak ve kaç tasarım deseni olabileceğine şaşıracaksınız. Bu bir soyutlama/arayüz üzerine inşa.

Haskell'i ele geçirdikten sonra, tehlikeli olmak için emrinizde FP cephaneliğe sahip olacaksınız. Nokta, devam et elde edene kadar. Kısayol yok.

6
Mario T. Lanza