Bisakah saya menggunakan pemrograman fungsional dalam bahasa saya?

Berikut ini adalah terjemahan amatir dari esai oleh Eric Normand, seorang konsultan dan pembicara yang mempromosikan pemrograman fungsional.

Saya cukup bebas dengan syarat, tidak ragu menggunakan bahasa Inggris seperti "fitur". Saya bingung dengan terjemahan literal istilah programmer. Selamat membaca

Ringkasan: kami menjawab pertanyaan secara langsung, tetapi kemudian kami menganalisis prasangka yang tersembunyi di baliknya.


Cukup sering, pengembang yang berpengalaman bertanya kepada saya: "Apa yang bisa diberikan pemrograman fungsional yang tidak saya miliki? Bisakah saya mulai menggunakan FP dalam bahasa saya sendiri?" Ini pertanyaan yang bagus, saya harap saya bisa memberikan jawaban yang layak.


Saya benar-benar memahami penampilan masalah ini. JavaScript memiliki map , filter , dan reduce . Java 8 memiliki stream ( saya memutuskan untuk menggunakan Bahasa Inggris daripada kata "stream" - kira-kira. Penerjemah ). Tampaknya setiap bahasa menerima lebih banyak fitur fungsional, termasuk struktur data yang tidak dapat diubah , fungsi urutan pertama, komposisi fungsi, pengrusakan dan pengetikan yang baik.


Dan saya setuju: Anda dapat menggunakan FP dalam bahasa apa pun .


Pemrograman fungsional hanyalah sebuah paradigma. Sama seperti Anda dapat menulis dalam gaya prosedural, berorientasi objek atau logis dalam bahasa apa pun, Anda dapat menulis dalam gaya fungsional dalam bahasa apa pun.


Tunggu sebentar. Ini adalah jawaban untuk pertanyaan itu. Tapi apakah itu sesederhana itu?


Tanyakan pada diri Anda: bisakah saya menggunakan OOP di C? Menurut apa yang saya katakan di atas, jawabannya adalah ya. Selain itu, saya sudah membuat sistem objek kecil di C sebelumnya. Tapi mengapa saya perlu bahasa berorientasi objek jika saya bisa menggunakan objek dalam C? Rasanya seperti sistem objek saya memberi saya semua fitur yang diperlukan untuk OOP. Tapi ini pertanyaan lain: bisakah saya menggunakan OOP di C tanpa mengetahui OOP? Saya meragukannya.


Paradigma ini disebut paradigma karena ini adalah pendekatan holistik untuk bagaimana menyelesaikan masalah. OOP membagi tugas menjadi objek yang berinteraksi satu sama lain melalui pesan. FP mewakili tugas sebagai data yang menampilkan keadaan proses yang disimulasikan. Pendekatan prosedural menggambarkan solusi sebagai satu set langkah yang jelas. Setiap paradigma menawarkan cara berbeda untuk menyelesaikan masalah. Jika Anda berpikir bahwa Anda dapat menggunakan FP di Java tanpa menjadi spesialis dalam FP, maka Anda mengatakan bahwa pemrograman fungsional bukan paradigma, tetapi hanya seperangkat fitur (data yang tidak dapat diubah, fungsi murni, komposisi mereka, dll.).


Saya telah menemukan ini berkali-kali. Orang mengklaim menulis dengan gaya fungsional dalam JavaScript. Bahkan, mereka hanya menggunakan map dan reduce ditambah dengan sejumlah fungsi murni . Dan itu memberikan hasil yang baik, tetapi secara umum kode mereka prosedural. Mereka mempelajari bukan paradigma, tetapi hanya fitur-fiturnya.


Keuntungan dari bahasa yang secara kaku memaksakan suatu paradigma adalah ia mengajarkan Anda untuk menggunakan pendekatan ini untuk menyelesaikan masalah. Dan semakin dia memaksakannya, semakin sering Anda harus mencoba menyelesaikan masalah dalam kerangka paradigma ini. Semakin fungsional bahasa Anda, semakin banyak Anda akan berlatih menggunakan pendekatan fungsional untuk menyelesaikan masalah. Hal yang sama berlaku untuk gaya OOP dan prosedural. Singkatnya, Anda berlatih dengan tidak bisa menggunakan pendekatan yang biasa Anda lakukan.


Biarkan saya membuat pernyataan yang lebih kontroversial: di luar bahasa yang fungsional (Clojure, Haskell, Elm, Scala, Erlang, dll.), Tidak banyak FP yang digunakan. Kecuali ketika pengembang sudah terbiasa dengan gaya fungsional, berkat pengalaman yang kaya, mereka hanya menggunakan remah-remah dari apa yang ditawarkan paradigma. Dan mereka kehilangan hal yang paling penting: kesempatan untuk melihat tugas dari sudut yang berbeda.


Saya tidak mengatakan bahwa tidak mungkin untuk benar-benar belajar FP menggunakan JavaScript, tetapi ini akan membutuhkan disiplin diri dan bantuan . Bahasa tidak akan memandu Anda di sepanjang jalan ini. Anda harus melakukannya sendiri, atau menemukan seseorang yang akan membantu Anda.


Kesimpulan


Semua paradigma sangat baik karena "satu sudut pandang setara dengan 80 poin IQ . " Anda dapat menggunakan paradigma apa pun dalam bahasa apa pun. Tetapi sangat sulit untuk mempelajari paradigma tanpa masuk ke dalamnya. Dan cukup sulit untuk menyelam tanpa menggunakan bahasa yang memaksanya. Sampai Anda melakukan ini, Anda akan menggunakan fitur paradigma, tetapi tidak menyelesaikan masalah dengan cara baru. Secara umum, pemrograman fungsional bukan seperangkat fitur. Jika Anda ingin mempelajarinya, benamkan diri Anda di dalamnya.

Source: https://habr.com/ru/post/id436396/


All Articles