Ben temelde FrustratedWithFormsDesign en yanıta katılabilir , ancak yeni bir paradigma öğrenme kişinin becerilerini geliştirmeye yardımcı olur nasıl da istedi. Kendi tecrübelerime göre birkaç örnek verebilirim.
İşlevsel programlama öğrendiğimden beri, çalıştığım hangi kavramların daha doğal olarak “nesneler” olarak kabul edildiğinin (genellikle mutasyonun anlamlı olduğu yerlerde) ve daha doğal olarak değişmez “değerler” olarak değerlendirildiğinin farkındayım (önemli bir ayrım var. OO'nun anlamlı olduğu yere veya FP'nin anlamlı olduğu zamanlara dokunmak, ancak bu sadece benim görüşüm).
Kodumun nerede yan etkileri olduğunu fark ettim ve bu yerleri izole etmek için daha dikkatli oluyorum, bu da fonksiyonlarımdan daha "saf" işlevler yapıyor. Bu, OO kodumun test edilebilirliğini büyük ölçüde artırıyor.
Veri sunumumdaki çevrimler hakkında daha bilinçliyim. (Örneğin, Haskell'de bir bağlantılı listeyi iki kat bağlantılı bir listeye dönüştürmek için bir işlev yazabileceğinizi sanmıyorum, bu nedenle bu dilde biraz daha fazla döngü olduğunu farkedersiniz.) Döngüleri engellemek senkronizasyon miktarını azaltır veri yapılarının dahili olarak tutarlı olması için bu yapıları iş parçacığı arasında paylaşma yükünü hafifletmek için yapmanız gerekir.
Özyinelemeye güvenme ihtimalim daha yüksek (planın özyinelemeli döngü yapıları güzellik şeylerdir). Dijkstra , Yapısal Programlamaya İlişkin Notlar - özyinelemeli algoritmalar ile doğrudan entelektüel döngülerimizin doğru olduğunu kanıtlamanın tek yolu olduğunu öne sürdüğü matematiksel indüksiyonla eşleştirdiği için bunun önemine değindi . (Kodumuzu doğru kanıtlamamız gerektiğini önermiyorum, ancak kendimiz için daha kolay hale getirmemiz, kodumuzun doğru olması olasılığını artırıyor.)
Daha üst düzey işlevleri kullanma ihtimalim daha yüksek John Hughes'un makalesi, İşlevsel Programlamanın Neden Önemli ? Fonksiyonel programlama tekniklerini kullanarak elde edeceğiniz uyuşmazlığı vurgulamaktadır, üst düzey fonksiyonları büyük bir rol oynar.
Ayrıca, Jetti'nin cevabına değinildiği gibi , birçok OO fikrinin daha yeni OO dillerine dahil edildiğini göreceksiniz. Ruby ve Python'un her ikisi de birçok üst düzey işlev sunar, LINQ'nun monadik anlamalara destek sağlama çabası olarak tanımlandığını duydum, hatta C ++ 'ın şimdi lambda ifadeleri var.