Kekuatan pemrograman fungsional





Hei! Nama saya Katerina dan saya memiliki perasaan terhangat untuk pemrograman fungsional, saya menggunakan bahasa fungsional secara berkelanjutan dan bahkan mengajar sedikit.



Bahasa pengembangan utama kami di Typeable adalah Haskell, dan sementara semua orang berdebat tentang apakah Haskell siap untuk produksi, kami hanya menggunakannya dan menganggapnya sebagai keunggulan kompetitif. Kami ingin membagikan pendapat kami berdasarkan pengalaman ini.



Bagaimana FP meningkatkan pemrograman



Pemrograman fungsional cukup populer saat ini, dan elemen FP mulai muncul dalam banyak bahasa imperatif, seperti fungsi lambda, aplikasi parsial (kari), fungsi tingkat tinggi (peta, filter, konvolusi). Di suatu tempat, pinjaman ini terlihat bagus, tetapi di suatu tempat mereka mengarah ke sintaks asing yang agak aneh. Tetapi paradigma pemrograman adalah pendekatan yang hidup di kepala programmer dan, secara umum, bukan bagian dari bahasa. Pada tingkat tertentu, bahasa apa pun mendukung paradigma yang berbeda, dan desainnya memungkinkan program dikembangkan dalam gaya yang berbeda. Apakah layak dikembangkan dalam gaya fungsional adalah pertanyaan terbuka, dan setiap pengembang menjawabnya berdasarkan preferensi, kemampuan bahasa, dan pertimbangan lainnya.



Kami percaya bahwa menggunakan gaya fungsional dalam bahasa imperatif, atau lebih baik lagi, bahasa fungsional, terutama yang diketik secara statis, akan membantu membuat kode jauh lebih baik, yaitu:



  1. Kode akan menjadi lebih ringkas dan ekspresif. "Ekspresi" dapat didefinisikan sebagai jumlah ide per unit kode, dan secara umum, bahasa fungsional, yang tingkatnya lebih tinggi, juga lebih ekspresif. Misalnya, transformasi setiap elemen dalam larik atau daftar dilakukan dalam satu baris fungsional (menggunakan map / foreach / apa saja dan fungsi anonim), sementara dalam gaya imperatif seseorang harus mengatur perulangan, mendeklarasikan variabel untuk counter atau iterator, dan gunakan tugas eksplisit. Untuk contoh yang lebih kompleks, perbedaan ekspresi hanya meningkat.
  2. . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .



  3. . — , . : , , . , , , ? . «» , , « ».
  4. Kode akan menjadi lebih mudah untuk di-debug dan diuji. Poin ini mengikuti dari dua yang sebelumnya: kami memiliki satu set fungsi kecil, beberapa di antaranya murni, yaitu. kita tahu bahwa hasilnya hanya bergantung pada masukan. Kode menjadi lebih mudah untuk di-debug - Anda hanya perlu memeriksa fungsi apa yang ditampilkan secara terpisah untuk memahami cara kerjanya. Menulis pengujian unit untuk logika "bersih" aplikasi Anda sama mudahnya. 


Bagaimana FP meningkatkan pemrogram









Selanjutnya, saya ingin berbagi pengalaman saya yang tidak berhubungan langsung dengan menulis program dalam bahasa fungsional, dan memberi tahu Anda tentang pengetahuan dan penggunaan FP apa lagi yang berguna bagi saya dan semoga bermanfaat bagi Anda:



  1. , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
  2. , , computer science. , . , , - , , .
  3. . , « » , , . , . , . , , , . , , - , - , . , , .
  4. : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — ! 


Kesimpulan



Munculnya elemen FP dalam bahasa pengembangan industri populer seperti Python, C ++, Kotlin, Swift, dll., Menegaskan bahwa pendekatan ini benar-benar berguna dan memiliki kekuatan. Menerapkan gaya fungsional memungkinkan kode yang lebih kuat yang lebih mudah dipecah, digeneralisasi, dan diuji, apa pun bahasa pemrogramannya. Tentu saja, bahasa fungsional memungkinkan Anda memanfaatkan sepenuhnya manfaat ini dengan menyediakan konstruksi alami dengan tingkat ekspresi yang tinggi.



Ada sejumlah besar bahasa fungsional, tetapi, menurut pandangan kami, saat ini yang paling nyaman dan berguna untuk pengembangan adalah yang menggunakan pengetikan statis. Hal ini memungkinkan Anda untuk menangkap banyak kesalahan selama kompilasi dan mengekspresikan bagian dari logika aplikasi pada level tipe.



Sebagai kesimpulan, saya ingin semua orang tidak takut menggunakan pendekatan alternatif dan mencobanya dalam praktik, bahkan jika itu hanya akan berguna untuk pengembangan diri Anda.



All Articles