Banyak jawaban lain berfokus pada sisi kinerja (paralelisme) pemrograman fungsional, yang saya yakini sangat penting. Namun, Anda memang secara spesifik bertanya tentang produktivitas, seperti dalam, bisakah Anda memprogram hal yang sama lebih cepat dalam paradigma fungsional daripada dalam paradigma imperatif.
Saya benar-benar menemukan (dari pengalaman pribadi) bahwa pemrograman dalam F # cocok dengan cara saya berpikir yang lebih baik, sehingga lebih mudah. Saya pikir itu perbedaan terbesar. Saya telah memprogram dalam F # dan C #, dan ada jauh lebih sedikit "melawan bahasa" dalam F #, yang saya sukai. Anda tidak perlu memikirkan detail di F #. Inilah beberapa contoh dari apa yang saya temukan yang sangat saya nikmati.
Sebagai contoh, meskipun F # diketik secara statis (semua tipe diselesaikan pada waktu kompilasi), inferensi tipe mencari tahu tipe apa yang Anda miliki, jadi Anda tidak perlu mengatakannya. Dan jika tidak bisa mengetahuinya, secara otomatis membuat fungsi Anda / kelas / apa pun generik. Jadi, Anda tidak perlu menulis generik apa pun, semuanya otomatis. Saya menemukan itu berarti saya menghabiskan lebih banyak waktu untuk memikirkan masalah dan lebih sedikit bagaimana menerapkannya. Bahkan, setiap kali saya kembali ke C #, saya merasa saya benar-benar kehilangan inferensi tipe ini, Anda tidak pernah menyadari betapa mengganggu itu sampai Anda tidak perlu melakukannya lagi.
Juga di F #, alih-alih menulis loop, Anda memanggil fungsi. Ini adalah perubahan yang halus, tetapi signifikan, karena Anda tidak perlu memikirkan tentang loop build lagi. Sebagai contoh, berikut adalah sepotong kode yang akan melewati dan mencocokkan sesuatu (Saya tidak ingat apa, itu dari puzzle Euler proyek):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
Saya menyadari bahwa melakukan filter maka peta (itu adalah konversi dari setiap elemen) di C # akan sangat sederhana, tetapi Anda harus berpikir di tingkat yang lebih rendah. Khususnya, Anda harus menulis loop itu sendiri, dan memiliki pernyataan if if Anda sendiri, dan hal-hal semacam itu. Sejak mempelajari F #, saya menyadari saya merasa lebih mudah untuk membuat kode dengan cara fungsional, di mana jika Anda ingin memfilter, Anda menulis "filter", dan jika Anda ingin memetakan, Anda menulis "peta", daripada mengimplementasikan masing-masing detail.
Saya juga suka operator |>, yang saya pikir memisahkan F # dari ocaml, dan mungkin bahasa fungsional lainnya. Ini operator pipa, ini memungkinkan Anda "menyalurkan" output dari satu ekspresi ke input ekspresi lain. Itu membuat kode mengikuti bagaimana saya berpikir lebih. Seperti dalam cuplikan kode di atas, artinya, "ambil urutan faktor, saring, lalu petakan." Ini adalah tingkat pemikiran yang sangat tinggi, yang tidak Anda dapatkan dalam bahasa pemrograman imperatif karena Anda begitu sibuk menulis perulangan dan pernyataan if. Itu satu hal yang paling saya rindukan setiap kali saya masuk ke bahasa lain.
Jadi secara umum, meskipun saya dapat memprogram di C # dan F #, saya merasa lebih mudah untuk menggunakan F # karena Anda dapat berpikir pada tingkat yang lebih tinggi. Saya berpendapat bahwa karena detail yang lebih kecil dihapus dari pemrograman fungsional (setidaknya di F #), saya lebih produktif.
Sunting : Saya melihat di salah satu komentar yang Anda minta contoh "negara" dalam bahasa pemrograman fungsional. F # dapat ditulis secara imperatif, jadi inilah contoh langsung bagaimana Anda dapat memiliki status yang dapat berubah dalam F #:
let mutable x = 5
for i in 1..10 do
x <- x + i