Fonksiyonel programlama benim için garip bir canavar. F # ve Haskell'i öğrendim, birkaç basit program yazdım ve onları kullanmayı sevdim, ancak bazı insanların bahsettiği "vahiy parlaması" olmadı. Ama yavaş yavaş, giderek daha çok değişmez olması gereken kodlar yazdığımı, görevleri daha küçük fonksiyonlara böldüğümü ve delegeleri çok daha fazla kullanmaya çalıştığımı fark ettim. Bu, eğer isterseniz, işinize sürünen bir şey çünkü bu tekniklerin değeri kendiliğinden belirgindir.
Şimdi, daha pratik eğitim için: İki kavramın gerçekten bir stil olarak İşlevsel Programlama'yı tıkladığını görüyorum.
Birincisi, FP stili OOP'ta olduğu gibi kompozisyona değil, verilerin yapısına dayanmaktadır. C-in List gibi bir şey türü güvenli listeleri oluşturmak için akıllı bir hile olarak, diğer tür (liste) tür (dize) oluşan bir şey baktı. FP'yi öğrendikten sonra, şimdi Monads gibi jeneriklere bakıyorum. Liste, kodun alabileceği yapılandırılmış bir formdur ve dizeleri süsler.
İkincisi, ve belki de C # / ASP programcıları için daha yararlıdır, FP'nin özyineleme ve tekrarlama üzerinde çalışırken OOP değişebilirlik ve döngü üzerinde çalışır. Şimdi ASP sayfası yaşam döngüsünü bir tür FP olarak düşünme eğilimindeyim: her istek tüm yaşam döngüsü boyunca sıfırdan işlenir, bu nedenle tüm sayfa aslında büyük bir yavaş yavaş yinelenen programdır. Bu görüşü daraltabilirseniz, zorunlu bir programın veri alan, üzerinde çalışan ve eski verileri değiştirmek yerine yeni veriler veren işlev döngüleri etrafında nasıl yapılandırılabileceği hakkında daha iyi bir fikir edinebilirsiniz.
En azından benim için, bu yaklaşımın üstesinden gelmek için en zor engel, değişebilir nesneleri kullanırken tonlarca kaynağı boşa harcadığınızı hissetmek, bir ton hafıza tasarrufu sağlayacaktır. GC'de güveniyoruz ve programın çalıştığını ve hatta varsa doğrulandığını ve sorunların tam olarak nerede olduğunu görmek için bir profiler kullanmak için gerçekten görene kadar performans endişelerini bırakmayı öğrenmek zorunda kaldım.