Evet, FP kurumsal uygulamalarda kullanılabilir. Clojure, kuruluşta başarılı olan bir FP diline bir örnektir: http://cognitect.com/clojure#successstories
Devleti temsil etmek FP'de bir zorluk olabilir ve FP'ye uyacak paradigmaları değiştirmek biraz zihinsel bir çözgü olabilir. Bazı FP dilleri, yan etkilere ve değişebilir duruma tamamen izin vermez. Clojure, bu paradigmaları hem caydırır hem de izole eder.
Kısacası, devlet temsili OO'ya çok benzer olabilir. Çok farklı olan durum değişikliği. Örneğin, FP durumunda listeler ve haritalar ile temsil edilebilir. Çalışanların listesi şöyle görünebilir:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
FP'de durum değişikliğini ele almanın iki yolu var. Bunlardan biri işlevsel reaktif programlama gibi bir şey. Bu paradigmada tüm durum yalnızca en üst düzeyde ele alınır ... örneğin, uygulamanızın HTML görünümünde görünümde durum vardır (kişinin adı, adresi vb.). "Güncelleme adı" nı tıkladığınızda, aslında adı değiştirmek dışında bir ad güncellemesiyle ilgili her şeyi işleyen bir işlev çağrılır. Kulağa garip gelebilir ... ama bana katlan. Değiştirilen ad daha sonra işlev tarafından döndürülür ve görünüm (veya kalıcı veri deposu vb.) Yeni adı gösterir. Alternatif olarak, güncellenmiş ada sahip yeni bir yapının tamamı döndürülür. Peki fonksiyon ne yapıyor? Adı doğrular ve geçerliyse yeni adı, değilse bir hatayı döndürür, ve muhtemelen takip edilecek yeni bir görünüm veya gezinme bağlantısı. Bir isim değişikliğinden daha karmaşık bir şey için çok daha fazlasını yapabilir.
Bu nedenle, FRP için işlev tarafından döndürülen nesne yeni durumdur ve doğrudan görünüme veya yüksek düzeyde olan her şeye verilebilir. Bazı durumlarda FRP bütün durumu fonksiyona aktarır ve bütün durumu geri alır.
Bu paradigma ile, kapsayıcı veya çerçevenin ekranın, veritabanının veya yeni durumdan güncellenmesi gereken her şeyin güncellenmesi gerekir. Böylece uygulamayı ekrana çizen bir çerçeve hayal edebilirsiniz. Bir kullanıcı tıkladığında işlevler çağrılır ve yeni durum döndürülür. Çerçeve daha sonra her şeyi yeniden çizerek veya ekranın bazı bölümlerini akıllıca yeniden çizerek ekranı günceller. Bkz. Http://blog.getprismatic.com/om-sweet-om-high-functional-frontend-engineering-with-clojurescript-and-react/
Clojure, karşılaştığım ikinci paradigmayı kullanıyor ve bu da devlet değişikliklerini izole etmek, ancak onları en üst düzeyde sınırlamak zorunda değil. Clojure ile tüm değiştirilebilir durum bir atom, aracı veya referans tarafından "tutulmalıdır" (durum için Java nesneleri kullanmıyorsanız). Bunun çalışma şekli, atom / agent / ref tarafından tutulan veya gösterilen veya referans verilen (ancak çağırmak istediğiniz) nesnenin değişmez olmasıdır, ancak atom / agent / ref, yeni bir nesneyi gösterecek şekilde değişebilir. Bu durumda, atom / agent / ref üzerinde "nesneyi burada yaparak bunu güncelleyin ve atom / agent / ref'yi yeni bir nesneye yeniden atayarak" diyen özel yöntemler kullanırsınız.
Bu sorabileceğiniz neden faydalı? Bu Clojure yapıları tarafından başvurulan değişmez nesne, bir şey yapan bir işleve geçirilebileceğinden ve bu işlev çalışırken nesneye olan başvurusunun değişmemesi garanti edilir. Yani, atom / ajan / ref işleve geçirilmez, ancak işaret ettikleri değişmez nesne geçirilir. Atomlar, aracılar ve referanslar, güncellemeleri ve eşzamanlılığı güvenli ve dilin bir parçası olarak ele alan özel özelliklere sahiptir. Bkz. Http://clojure.org/state
Umarım bu yardımcı olur. Çalışanların ve kişilerin FP'de nasıl temsil edilebileceğinin daha iyi anlaşılması için Clojure durumu ve FRP hakkında daha fazla bilgi almanızı öneririm. Yine de, gerçek temsil nesne yönelimli programlamaya benzer olacaktır ... bu gerçekten farklı olan değişebilirliktir.