Son zamanlarda eğlence için F # öğreniyorum (Ben bir VB.NET/C# dev) ve gerçekten sunduğu şeylerden bazılarını seviyorum. Teorik olarak. Ama ben C # yerine F # kodlamak için tercih senaryoları düşünürken sorun yaşıyorum. Herhangi bir fikir?
Son zamanlarda eğlence için F # öğreniyorum (Ben bir VB.NET/C# dev) ve gerçekten sunduğu şeylerden bazılarını seviyorum. Teorik olarak. Ama ben C # yerine F # kodlamak için tercih senaryoları düşünürken sorun yaşıyorum. Herhangi bir fikir?
Yanıtlar:
Saf fonksiyonel programlama için birkaç argüman:
Tam bir tedavi için bkz. İşlevsel Programlama Neden Önemlidir ve Neden İşlevsel Programlama Neden Önemlidir .
Ben C # yerine F # kodlamak için tercih senaryoları düşünürken sorun yaşıyorum. Herhangi bir fikir?
Gönderen burada :
Eşzamansız sunucular
Meta programlama (örn. Ayrıştırma)
Teknik hesaplama
GUI uygulamaları
Mantık programlama
Test yapmak
Verim
inline
ücretsiz yüksek dereceli soyutlama için.İşlevsel stil programlamayı günlük olarak daha fazla veya daha az temelde kullanan şey.
Oldukça büyük veri kümeleriyle birçok istatistiksel ve aktüeryal şey yapıyoruz. Veritabanından getirilen veriler - esasen statik, değişmez nesnelerdir. Yöntemlerle bir sınıf oluşturmak için hiçbir neden yoktur.
Hesaplamanın her aşaması bazı ek ayrıntılar ekler, ancak nesneyi esasen değiştirmez. Boru hattının "sonunda", toplamları ve sayıları ve diğer şeyleri hesaplamak için gerçekten fantezi bir azalma yapıyoruz.
Bunu hayal edin.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
Hesaplamanın her "aşaması", basit okuma-hesaplama-verimi yapan ve diğer şeylerin ve sonuçların birleşik bir nesnesini oluşturan fonksiyonel bir programlama döngüsüdür.
(Python kullanıyoruz, dolayısıyla jeneratör fonksiyonlarını kullanarak fonksiyonel programlama yapıyoruz.)
Vatansız, değişmez nesneler kullanmak daha kolaydır.
criteria() |> some_query |> calculate |> enrich |> summarize
Ileri boru operatörü daha net bir kod yol açabilir buluyorum ama kazmak.
map
aynı etkiyi elde etmek için beste yaparım .
Teknik olarak, işlevsel bir programlamanın benzersiz bir özelliği değildir ve F #, saf bir işlevsel dil değildir. ML torunlarından biri olan F #, mükemmel bir desen eşleştirme ve cebirsel veri türleri sağlar. Bu nedenle, karmaşık veri yapıları gerektiren herhangi bir görev için F #, C # 'dan çok daha etkileyici ve kullanımı kolaydır.
C # ve F # 'da soyut bir sözdizimi ağacını temsil eden ve üzerinde dönüşüm gerçekleştiren bir derleyici uyguladığınızı düşünün.
Tamamen işlevsel Haskell denemek istiyorsanız, Erlang'ın da çok güzel şeyler var.
Simon Payton-Jones Haskell hakkında, açık bir hata yerine açık bir şekilde hata içermeyen bir programa sahip olmak istediğini söyledi.
(Muhtemelen teklifi biraz aldım, ama fikri anladın)
Yan etkileri kısıtlayarak, kodunuzun doğru olduğunu kanıtlamayı çok daha kolay hale getirirsiniz.
Kesin bir avantajı, çok daha kolay paralelleştirilmesidir.
F#
işlevsel programlamayı tam olarak temsil etmez.Clojure
Bunun yerine deneyin .