Pemrograman fungsional adalah binatang aneh bagi saya. Saya belajar F # dan Haskell, menulis beberapa program sederhana dan suka menggunakannya, tetapi tidak pernah memiliki "kilasan wahyu" yang dibicarakan beberapa orang. Tapi perlahan-lahan, saya perhatikan bahwa semakin banyak saya menulis kode yang dimaksudkan untuk tidak berubah, memecah tugas menjadi lebih banyak, fungsi yang lebih kecil, dan mencoba menggunakan delegasi lebih banyak lagi. Ini adalah hal yang, jika Anda suka, merayap ke dalam pekerjaan Anda karena nilai dari teknik-teknik itu jelas.
Sekarang, lebih praktis untuk pelatihan: Saya menemukan bahwa dua konsep benar-benar mengklik Pemrograman Fungsional sebagai gaya bagi saya.
Pertama, gaya KB didasarkan pada struktur data, bukan komposisi seperti dalam OOP. Saya melihat sesuatu seperti Daftar di C # sebagai trik pintar untuk menghasilkan daftar tipe-aman, sesuatu yang menyusun tipe (string) ke dalam tipe lain (daftar). Setelah mempelajari FP, saya melihat generik lebih mirip Monads sekarang. Daftar adalah bentuk terstruktur yang dapat diambil kode, dan menghiasi string.
Kedua, dan mungkin lebih bermanfaat bagi pemrogram C # / ASP, adalah gagasan bahwa FP bekerja pada rekursi dan pengulangan, sementara OOP bekerja pada mutabilitas dan perulangan. Saya cenderung menganggap siklus halaman ASP sebagai semacam FP sekarang: setiap permintaan diproses dari awal sampai seluruh siklus hidup, sehingga seluruh halaman, pada dasarnya, adalah satu program berulang yang besar dan lambat. Jika Anda dapat mempersempit gagasan itu, Anda mendapatkan ide yang lebih baik tentang bagaimana program imperatif dapat disusun di sekitar loop fungsi yang mengambil data, beroperasi di atasnya, dan mengembalikan data baru alih-alih memodifikasi yang lama.
Rintangan paling sulit, setidaknya bagi saya, untuk diatasi dengan pendekatan ini adalah perasaan tenggelam bahwa Anda membuang banyak sumber daya saat menggunakan objek yang bisa berubah akan menghemat banyak memori. Di GC kami percaya, dan saya hanya harus belajar untuk melepaskan masalah kinerja sampai saya benar-benar melihat program berjalan dan memverifikasi jika ada, dan jika demikian menggunakan profiler untuk melihat dengan tepat di mana masalahnya.