Saya baru-baru ini belajar F # untuk bersenang-senang (saya seorang VB.NET/C# dev), dan saya benar-benar menyukai beberapa hal yang ditawarkan. Secara teoritis itu. Tapi saya mengalami kesulitan memikirkan skenario di mana saya akan memilih untuk kode di F # daripada di C #. Ada ide?
programming-languages
functional-programming
f#
Sistem Down
sumber
sumber
F#
tidak sepenuhnya mewakili pemrograman fungsional. CobaClojure
saja.Jawaban:
Beberapa argumen untuk pemrograman fungsional murni:
Untuk perawatan lengkap, lihat Mengapa Pemrograman Fungsional Penting dan Mengapa Pemrograman Fungsional Penting .
sumber
Dari sini :
Server asinkron
Metaprogramming (misal penguraian)
Komputasi teknis
Aplikasi GUI
Pemrograman logika
Pengujian
Performa
inline
untuk abstraksi tingkat tinggi tanpa biaya.sumber
Inilah yang menggunakan pemrograman gaya fungsional untuk - setiap hari lebih atau kurang.
Kami melakukan banyak hal statistik dan aktuaria dengan dataset yang cukup besar. Data yang diambil dari database adalah - objek yang pada dasarnya statis, tidak dapat diubah. Tidak ada alasan untuk membuat kelas dengan metode.
Setiap tahap perhitungan menambahkan beberapa detail tambahan, tetapi pada dasarnya tidak mengubah objek. Pada akhir pipa, kami benar-benar melakukan pengurangan untuk menghitung jumlah dan jumlah dan hal lainnya.
Bayangkan ini.
Setiap "fase" perhitungan adalah loop pemrograman fungsional yang tidak membaca-menghitung-hasil sederhana dan menciptakan objek komposit dari hal-hal lain ditambah hasil.
(Kami menggunakan Python, maka pemrograman fungsional menggunakan fungsi generator.)
Lebih mudah menggunakan stateless, objek yang tidak dapat diubah.
sumber
criteria() |> some_query |> calculate |> enrich |> summarize
Saya menemukan operator pipa maju dapat mengarah ke kode yang lebih jelas tetapi saya ngelantur.map
untuk mendapatkan efek yang sama.Secara teknis, ini bukan properti unik dari pemrograman fungsional, dan F # bukan bahasa fungsional murni. F #, sebagai salah satu keturunan ML, memberikan pencocokan pola yang sangat baik dan tipe data aljabar. Jadi, untuk tugas apa pun yang membutuhkan struktur data yang kompleks, F # jauh lebih ekspresif dan mudah digunakan daripada C #.
Bayangkan menerapkan kompiler di C # dan F # - mewakili pohon sintaksis abstrak dan mengubahnya lebih mudah jika bahasa Anda menyediakan ADT dan pencocokan pola.
sumber
Ideal untuk jenis pengurangan multi-sistem masif dan paralelisme multi-inti besar. Cukup keren, mengingat saat ini server entry level datang dengan 48 core (96 menghitung HT).
sumber
Jika Anda ingin berfungsi penuh, cobalah Haskell, Erlang juga memiliki beberapa hal yang sangat keren tentangnya.
Simon Payton-Jones mengatakan tentang Haskell, dia ingin memiliki program yang jelas tidak memiliki bug, daripada tidak memiliki bug yang jelas.
(Saya mungkin mendapat penawaran sedikit, tetapi Anda mendapatkan ide)
Dengan membatasi efek samping, Anda membuatnya lebih mudah untuk membuktikan bahwa kode Anda benar.
sumber
Satu keuntungan yang pasti adalah bahwa itu jauh lebih mudah diparalelkan.
sumber