Ya, FP dapat digunakan dalam aplikasi perusahaan. Clojure adalah salah satu contoh bahasa FP yang sukses di perusahaan: http://cognitect.com/clojure#successstories
Mewakili negara bisa menjadi tantangan dalam FP dan mengubah paradigma agar sesuai dengan FP bisa menjadi sedikit warp. Beberapa bahasa FP benar-benar melarang sisi memengaruhi dan status yang bisa berubah. Clojure memungkinkan keduanya tetapi tidak menganjurkan atau mengisolasi paradigma tersebut.
Singkatnya, representasi negara mungkin sangat mirip dengan OO. Modifikasi keadaannya sangat berbeda. Jadi misalnya, dalam keadaan FP dapat diwakili oleh daftar dan peta. Daftar karyawan mungkin terlihat seperti:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
Ada dua cara yang saya tahu untuk menangani modifikasi negara di FP. Salah satunya adalah sesuatu seperti pemrograman reaktif fungsional. Dalam paradigma ini, semua status ditangani hanya pada level tertinggi ... misalnya, tampilan HTML dari aplikasi Anda memiliki status dalam tampilan (seperti nama orang, alamat, dll.). Sekarang ketika Anda mengklik "perbarui nama" sebuah fungsi dipanggil yang menangani segala sesuatu tentang pembaruan nama kecuali benar-benar mengubah nama. Ini mungkin terdengar aneh ... tetapi bersabarlah. Nama yang diubah kemudian akan dikembalikan oleh fungsi dan tampilan (atau penyimpanan data persisten, dll.) Akan menunjukkan nama baru. Atau, sebagai alternatif, seluruh struktur baru dengan nama yang diperbarui akan dikembalikan. Jadi apa fungsinya? Ini memvalidasi nama dan mengembalikan nama baru jika itu valid, kesalahan jika tidak, dan mungkin tautan tampilan atau navigasi baru untuk diikuti. Untuk sesuatu yang lebih kompleks daripada perubahan nama, itu mungkin lebih bermanfaat.
Jadi untuk FRP objek yang dikembalikan oleh fungsi adalah status baru dan dapat diberikan langsung ke tampilan atau apa pun yang ada di level tinggi. Dalam beberapa kasus FRP mengambil seluruh negara melewatinya ke fungsi dan mendapatkan seluruh negara kembali.
Dengan paradigma ini, wadah atau kerangka kerja perlu menangani pembaruan tampilan, database, atau apa pun yang perlu diperbarui dari keadaan baru. Jadi Anda bisa membayangkan sebuah kerangka kerja yang menggambar aplikasi di layar. Ketika pengguna mengklik fungsi sesuatu dipanggil dan negara baru dikembalikan. Kerangka kerja kemudian memperbarui layar dengan menggambar ulang semuanya atau dengan cerdas menggambar ulang bagian layar. Lihat http://blog.getprismatic.com/om-sweet-om-high-functional-frontend-engineering-with-clojurescript-and-react/
Clojure menggunakan paradigma kedua yang saya temui dan itu adalah untuk mengisolasi perubahan negara tetapi tidak harus membatasi mereka ke tingkat tertinggi. Dengan Clojure, semua status yang dapat berubah harus "dipegang" (kecuali jika Anda menggunakan objek Java untuk status) oleh atom, agen, atau referensi. Cara kerjanya adalah objek yang dipegang atau diarahkan atau direferensikan (namun Anda ingin menyebutnya) oleh atom / agen / ref tidak dapat diubah, tetapi atom / agen / ref dapat berubah untuk menunjuk ke objek baru. Dalam hal ini Anda menggunakan metode khusus pada atom / agen / ref yang mengatakan "perbarui objek di sini dengan melakukan ini dan itu dan menugaskan atom / agen / ref ke objek baru".
Mengapa ini bermanfaat, Anda mungkin bertanya? Karena objek abadi yang dirujuk oleh konstruk Clojure ini dapat diteruskan ke fungsi yang melakukan sesuatu dan sementara fungsi itu menjalankan referensi ke objek dijamin tidak berubah. Yaitu, atom / agen / ref tidak diteruskan ke fungsi tetapi objek abadi yang ditunjukkan oleh mereka dilewatkan. Atom, agen, dan referensi memiliki properti khusus yang menangani pembaruan dan konkurensi dengan cara yang aman dan merupakan bagian dari bahasa. Lihat http://clojure.org/state
Saya harap ini membantu. Saya sarankan membaca lebih lanjut tentang keadaan Clojure dan FRP untuk mendapatkan pemahaman yang lebih baik tentang bagaimana karyawan dan orang-orang dapat diwakili dalam FP. Padahal, representasi aktual akan mirip dengan pemrograman berorientasi objek ... itu adalah mutabilitas yang sangat berbeda.