İşlevsel programlama için SOLID ilkelerinin eşdeğeri


35

Nesne yönelimli tasarım hakkında düşünürken SOLID ilkelerini oldukça faydalı buldum .

İşlevsel programlama için uyarlanmış benzer / eşdeğer bir dil-agnostik ilke seti var mı?


12
FWIW, bu konuda kısaca bahsedildi SO bir yıl önce
StuartLC


Bu videonun yanı sıra bu slaytlar da İşlevsel Programlamaya uygulanan SOLID ilkelerini sunar. Her ikisi de Clojure dilini örnek olarak kullanıyor, ancak ilkeler başka dillerde de geçerli.
maskol


Yanıtlar:


14

Eşdeğerleri bulmak biraz zor ama deneyebilirim:

  • FP'de S (SRP), bir fonksiyon DAİMA yaratır, aynı bağımsız değişken olarak adlandırılan aynı argümanlar için aynı çıktıyı oluşturur.
  • FP'de O (OCP) cebirsel veri türleri adı verilen bir kavram var, sınıf hiyerarşileri ile nasıl ilişkili olduğuna ve her ikisinin de çözmeye çalıştığı problemlere bir göz atın 1
  • L (LSP) Liskov Değişim Prensibi Karşıtlık 2
  • D genel fonksiyonel programlama (DİP) "Bağımlılık enjeksiyon" için, aynı zamanda (örneğin, Monoid veya funktor için) kategorisi teorinin yardımıyla diğer mekanizma vardır fonksiyonu bileşimi boyunca soyutlama elde 3

21
Hala dan nasıl girdi düşünüyorum Tek Sorumluluk İlkesi için referans saydamlığını . Bu ikisi ilgisiz. SRP, tek bir amacı olan bir işlev hakkındadır. Bu konuda referans olarak şeffaf olabilir veya olmayabilir.
Goran Joviç

3
Ah, benim hatam - şimdi anlıyorum. Bunlar, aynı veya benzer bir şeyi anlamında değil, prensipler anlamında ve aynı kısaltmayı oluşturan eşdeğerlerdir. Olumsuz oy için özür dilerim!
Goran Joviç

1
Doğru, okumanın amacı budur. Bu terimler için bir eşlemeyi fp bağlamında tanımlamaya çalıştım.
AndreasScheinert

Adam, bir yorumu düzenleyememekten nefret ediyorum, aslında en azından benzer bir şey ifade etmesi gereken şeyler.
AndreasScheinert

Belki daha yüksek dereceli fonksiyonlar bir tür bağımlılık enjeksiyonunu sağlayabilir: genel bir (yüksek dereceli) fonksiyona parametre olarak somut bir fonksiyon enjekte edersiniz.
Giorgio

44

SOLID, işlevsel / zorunlu bölgeler için de iyi bir fikir olarak ortaya çıkıyor.

SRP - 'Sadece bir şeyi yap', ilk önce zorunlu programlamadan alınmıştır. Küçük, odaklanmış işlevlere sahip olmak iyidir.

OCP - Kodları değiştirmeden davranışları değiştirmenize izin vermek iyidir. Fonksiyonel programlama, kalıtımdan çok daha yüksek dereceli fonksiyonlar kullanır, ancak prensibi tutar.

LSP - Bazı arayüz sözleşmelerine uymak, işlevsel programlamada nesne yönelimi kadar iyidir. Eğer bir sıralama işlevi karşılaştırıcıya sahipse, '0'ın, negatif sonuçlardan daha az, pozitif sonuçlardan daha büyük' ​​davranışına eşit olmasını beklersiniz.

ISS - Çoğu işlevsel dilde hala yapılar var. Bir fonksiyon için gereken en küçük veri setini belirlemek hala iyi bir uygulamadır. Verilere en az belirli bir arayüze gereksinim duyma (neden T Numaralandırmaları da iyi çalışıyorsa, neden Listesi Listelerini kullan)?

DIP - Bir fonksiyona parametreler belirlemek (veya bunları almak için daha yüksek dereceli bir fonksiyon), fonksiyona bir değer elde etmek için zor kodlama yapmak yerine, fonksiyon programlamada nesne yönelimli olduğu kadar iyidir.

Nesneye yönelik programlama yaparken bile, bu ilkelerin çoğu nesnelerdeki yöntemlerin tasarımı için de geçerlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.