Diğer cevapların çoğu, çok önemli olduğuna inandığım fonksiyonel programlamanın performans (paralellik) tarafına odaklandı. Bununla birlikte, özellikle üretkenlik hakkında sordunuz, olduğu gibi, aynı şeyi işlevsel bir paradigmada zorunlu bir paradigmadan daha hızlı programlayabilir misiniz?
Aslında (kişisel deneyimlerime dayanarak) F # programlamanın benim daha iyi düşünme şeklimle eşleştiğini ve bu yüzden daha kolay olduğunu buluyorum. Bence en büyük fark bu. Hem F # hem de C # ile programladım ve F # 'da sevdiğim çok daha az "dille mücadele" var. F # 'daki ayrıntıları düşünmek zorunda değilsiniz. İşte gerçekten hoşlandığımı bulduğum birkaç örnek.
Örneğin, F # statik olarak yazılsa bile (tüm türler derleme zamanında çözülür), tür çıkarımı hangi türlere sahip olduğunuzu belirler, böylece söylemek zorunda kalmazsınız. Ve eğer çözemezse, otomatik olarak işlevinizi / sınıfınızı / genel ne olursa olsun yapar. Yani asla genel bir şey yazmanıza gerek yok, hepsi otomatik. Bunun, sorun hakkında düşünmeye daha fazla zaman harcadığım ve onu nasıl uygulayacağımı daha az zaman harcadığım anlamına geldiğini görüyorum. Aslında, C # 'a ne zaman dönsem, bu tür çıkarımları gerçekten özlediğimi anlıyorum, artık yapmanız gerekmeyene kadar bunun ne kadar dikkat dağıtıcı olduğunu asla anlamıyorsunuz.
Ayrıca F # 'da döngü yazmak yerine işlevleri çağırırsınız. Bu ince bir değişiklik, ancak önemli çünkü artık döngü yapısı hakkında düşünmek zorunda değilsiniz. Örneğin, işte geçip bir şeyle eşleşecek bir kod parçası (ne olduğunu hatırlayamıyorum, bir Euler bulmacası projesinden):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
C # 'da bir filtre yapıp sonra bir harita (bu her bir öğenin dönüşümüdür) yapmanın oldukça basit olacağını, ancak daha düşük bir düzeyde düşünmeniz gerektiğini fark ediyorum. Özellikle, döngünün kendisini yazmanız ve kendi açık if ifadenize ve bu tür şeylere sahip olmanız gerekir. F # öğrendiğimden beri, işlevsel bir şekilde kodlamayı daha kolay bulduğumu fark ettim, burada filtrelemek istiyorsanız, "filtre" yazarsınız ve haritalamak istiyorsanız, uygulamak yerine "harita" yazarsınız. ayrıntıların her biri.
F # 'ı ocaml'den ve muhtemelen diğer işlevsel dillerden ayırdığını düşündüğüm |> operatörünü de seviyorum. Bu boru operatörüdür, bir ifadenin çıktısını başka bir ifadenin girdisine "aktarmanıza" izin verir. Kodun daha çok düşündüğümü takip etmesini sağlıyor. Yukarıdaki kod parçacığında olduğu gibi, "faktör sırasını alın, filtreleyin, sonra eşleyin" diyor. Bu çok yüksek bir düşünme seviyesi, ki bunu zorunlu bir programlama dilinde alamazsınız çünkü döngüyü ve if ifadelerini yazmakla çok meşgulsünüz. Başka bir dile gittiğimde en çok özlediğim şey bu.
Yani genel olarak, hem C # hem de F # ile programlayabilsem de, F # kullanmayı daha kolay buluyorum çünkü daha yüksek bir seviyede düşünebilirsiniz. Daha küçük detaylar fonksiyonel programlamadan kaldırıldığı için (en azından F # olarak) daha üretken olduğumu iddia ediyorum.
Düzenleme : İşlevsel bir programlama dilinde bir "durum" örneği istediğini yorumlardan birinde gördüm. F # zorunlu olarak yazılabilir, bu yüzden işte F #'da nasıl değiştirilebilir duruma sahip olabileceğinize dair doğrudan bir örnek:
let mutable x = 5
for i in 1..10 do
x <- x + i