Mengapa Anda harus memikirkan pemrograman fungsional

Halo, Habr! Saya hadir untuk Anda terjemahan dari artikel saya "Mengapa Anda harus berpikir tentang pemrograman fungsional" , yang ditujukan untuk pemrograman fungsional.

gambar

Mengapa Anda harus memikirkan pemrograman fungsional? Mari kita jawab pertanyaan-pertanyaan berikut:

  • Apakah proyek Anda selalu tepat waktu?
  • Apakah pengguna punya keluhan?
  • Apakah dukungan proyek pernah memakan waktu lama?
  • Apakah fungsionalitas baru selalu cocok dengan arsitektur yang ada?

Jika jawaban untuk semua pertanyaan di atas adalah positif, Anda tidak perlu mengubah apa pun, tim Anda adalah contoh langka staf yang harmonis, metodologi dan alat. Jika tidak, Anda harus terbuka terhadap pendekatan baru untuk menyelesaikan masalah Anda, termasuk pandangan kritis pada perangkat keras dan bahasa pemrograman yang digunakan.

Penampilan pertama


Seperti yang Anda tahu, programmer adalah orang yang sangat kreatif, tetapi pada saat yang sama mereka cenderung mengikuti beberapa tren ketika memilih bahasa pemrograman. Di antara sejumlah besar bahasa, bahasa fungsional menjadi semakin populer di kalangan penggemar, dan perusahaan di seluruh dunia menggunakannya dengan lebih percaya diri. Penggunaan bahasa fungsional dapat secara signifikan meningkatkan produktivitas dan kualitas kerja programmer. Biasanya, ini tergantung pada kombinasi tugas, bahasa, dan keterampilan pemrograman. Dalam hal ini, programmer hanya menjelaskan apa yang diinginkannya, alih-alih mendaftar urutan tindakan yang diperlukan untuk mendapatkan hasilnya. Dengan demikian, pengembang berfokus pada "apa yang diperlukan" tingkat tinggi daripada terjebak pada "cara melakukannya" tingkat rendah.

Pemrograman fungsional adalah gaya program penulisan dengan menyusun serangkaian fungsi. Prinsip dasarnya adalah untuk membungkus hampir semuanya dalam suatu fungsi, menulis banyak fungsi kecil yang dapat digunakan kembali, dan kemudian memanggil mereka satu demi satu. Selain itu, struktur fungsi-fungsi ini harus mematuhi aturan tertentu dan menyelesaikan beberapa masalah.

Jadi, jika ada masalah yang bisa diselesaikan dengan menggabungkan panggilan ke beberapa fungsi, maka:

  1. Bagaimana menerapkan kondisi if-else?
  2. Bagaimana cara mengatasi trik dengan Null Exception?
  3. Bagaimana memastikan bahwa fungsinya benar-benar "dapat digunakan kembali" dan dapat digunakan di mana saja?
  4. Bagaimana cara memastikan bahwa data yang ditransfer ke fungsi kita diubah dan dapat digunakan di tempat lain?
  5. Jika suatu fungsi mengambil beberapa nilai, tetapi ketika digabungkan dalam sebuah rantai, Anda hanya dapat melewatkan satu fungsi, lalu bagaimana kita membuat fungsi ini menjadi bagian dari rantai?

Untuk mengatasi semua masalah ini, bahasa fungsional menyediakan alat dan solusi dari matematika, seperti monad, functors, dan sebagainya.

Manfaat pemrograman fungsional telah lama diakui oleh masyarakat umum. Pengembangan perangkat lunak yang berhasil seringkali bermuara pada penyederhanaan mekanisme yang ada yang memungkinkan aplikasi baru untuk beradaptasi dengan persyaratan pengguna modern. Dan pada saat yang sama, kita harus bergegas, setelah berhasil mempresentasikan produk kepada pelanggan dengan kemungkinan tak terbatas dalam waktu singkat. Mengubah persyaratan jauh lebih mudah diikuti ketika aplikasi yang dikembangkan dapat dibagi menjadi beberapa fungsi sederhana yang mudah diuji. Algoritma seperti itu tidak memiliki efek samping yang rumit dan formulasi abstrak yang dimaksudkan untuk hasil pada skala global.

Jadi mengapa para ahli mengabaikan pemrograman fungsional begitu lama? Dan mengapa itu menjadi begitu umum hari ini?

Di mana pemrograman fungsional digunakan di dunia nyata?


Karena pemrograman fungsional terutama merupakan pendekatan untuk menulis kode, Anda dapat menggunakan prinsip-prinsipnya dalam bahasa apa pun. Namun, ada bahasa yang secara khusus diasah oleh pendekatan fungsional. Bahasa fungsional yang lebih modern seperti Elm dan Elixir, menurut GitHub dan Stack Overflow, secara bertahap dan percaya diri mendapatkan popularitas. Semakin populernya JavaScript juga meningkatkan minat dalam konsep pemrograman fungsional untuk digunakan dalam bahasa ini. Selain itu, pengembang berpengalaman di bidang pemrograman fungsional kemudian mulai bekerja pada Aplikasi Web Tunggal - lingkungan SPA, dan sebagai hasilnya kami memiliki Redux, React, MobX dan perpustakaan lain yang digunakan oleh jutaan orang.

gambar

Contoh kehidupan nyata:

  • Apache percikan
  • Scalding (dari Twitter)
  • Apache kafka
  • Finagle (dari Twitter)
  • Aka
  • Autocad
  • emacs (LISP)

Jadi apa pemrograman fungsional, dari mana booming itu datang dan mengapa harus dipertimbangkan? Mari kita cari tahu.

Tentang pemrograman fungsional


Beberapa tahun yang lalu, hanya beberapa ahli yang memiliki gagasan tentang pemrograman fungsional, tetapi selama tiga tahun terakhir, hampir setiap basis kode aplikasi besar secara aktif menggunakan ide-ide yang diambil dari dunia pemrograman fungsional. Dan ada alasan obyektif untuk ini:

  • pemrograman fungsional memungkinkan Anda untuk menulis kode yang lebih ringkas dan dapat diprediksi
  • lebih mudah untuk memeriksa (walaupun belajar dari awal tidak mudah)

Fitur utama pengembangan perangkat lunak menggunakan pemrograman fungsional


  • Fungsi bersihnya sangat sederhana. Itu harus selalu mengembalikan hasil yang sama. Dengan nilai X dan Y yang sama, kami selalu mendapatkan hasil yang sama dari fungsinya. Prediktabilitas memainkan peran penting selama eksekusi program dalam pemrograman fungsional.
  • Hindari kondisi umum, data tidak stabil dan efek samping;
    Objek abadi adalah objek yang kondisinya tidak dapat diubah setelah penciptaannya. Objek yang tidak dapat berubah lebih berorientasi benang daripada objek yang dapat berubah. Jika fungsi tersebut tidak dapat diprediksi, ini akan menyebabkan efek samping yang tidak diinginkan. Dalam bahasa imperatif, fungsi dalam proses implementasi dapat membaca dan mengubah nilai-nilai variabel global dan melakukan input / output. Karena itu, jika kita memanggil fungsi yang sama dua kali dengan argumen yang sama, mungkin saja kita mendapatkan dua hasil yang berbeda. Fitur ini disebut efek samping.

    Pemrograman fungsional membantu kita menulis kode berorientasi thread.
  • Prevalensi pendekatan deklaratif daripada imperatif.

Komposisi fungsi


Komposisi fungsi adalah pendekatan pemrograman fungsional yang melibatkan pemanggilan beberapa fungsi sebagai argumen orang lain untuk membuat komposisi kompleks dari fungsi yang lebih sederhana. Metode tata letak ini memungkinkan Anda untuk mengambil dua atau lebih fungsi sederhana dan menggabungkannya menjadi satu fungsi yang lebih kompleks yang melakukan sub-fungsi dalam urutan logis dengan data apa pun. Untuk mendapatkan hasil ini, Anda menempatkan satu fungsi di dalam yang lain dan melakukan operasi dengan fungsi eksternal pada hasil fungsi internal hingga Anda mendapatkan hasilnya. Dan hasilnya mungkin berbeda, tergantung pada urutan penerapan fungsi.

Sebagai hasilnya, dengan urutan logis yang berbeda untuk memanggil fungsi murni dan nilai argumen yang sama, kita akan mendapatkan fungsionalitas yang lebih kompleks yang memberi kita hasil yang diinginkan dan membuatnya dapat diprediksi.

gambar

Manfaat Pemrograman Fungsional


Pemrograman fungsional membantu membuat kode lebih mudah dimengerti, dapat diprediksi, dan lebih mudah dibaca. Menggunakan prinsip-prinsip pemrograman fungsional membantu untuk menghilangkan abstraksi yang tidak perlu dengan perilaku yang tidak terduga, sehingga membuat program lebih dapat diprediksi dan mengurangi jumlah kesalahan yang mungkin terjadi.

Dalam bahasa fungsional, fungsi dapat diteruskan ke fungsi lain sebagai argumen atau dikembalikan sebagai hasilnya. Fungsi yang mengambil argumen fungsional disebut fungsi orde tinggi atau fungsional. Fitur paling populer adalah kartu. peta yang menerapkan fungsi tertentu untuk semua elemen daftar, membentuk daftar lain dari hasil.

Dalam pemrograman murni fungsional, operator penugasan tidak ada, objek tidak dapat diubah dan dihancurkan, yang baru hanya dapat dibuat dengan mendekode dan mensintesis yang sudah ada. Pengumpul sampah bawaan akan merawat benda-benda yang tidak perlu. Karena itu, dalam bahasa fungsional murni, semua fungsi bebas dari efek samping. Namun, ini tidak mencegah bahasa ini untuk meniru beberapa sifat imperatif yang berguna, seperti pengecualian dan array yang bisa berubah. Tentu saja, ada trik khusus untuk ini.

Kerugian pemrograman fungsional


  • Salah satu masalah pemrograman fungsional adalah berbeda dari apa yang sudah Anda ketahui. Anda harus mempelajari kembali banyak hal yang sudah Anda ketahui dalam situasi imperatif! Banyak pengembang berpengalaman yang sudah tahu apa yang sudah mereka ketahui tidak akan menyelesaikan masalah secara berbeda. Dibutuhkan waktu dan upaya untuk berpikir secara berbeda.
  • Mudah untuk menulis fungsi yang bersih, tetapi menggabungkannya ke dalam aplikasi yang lengkap adalah hal yang menjadi lebih rumit.
  • Masalah besar dengan kinerja yang dapat diprediksi. Hanya menggunakan nilai-nilai yang tidak dapat diubah dan rekursi berpotensi menyebabkan masalah kinerja, termasuk penggunaan dan kecepatan RAM, sehingga sebagian besar bahasa fungsional bukan pilihan yang sangat baik untuk sistem waktu-nyata lunak atau keras atau komputasi tertanam.
  • Pemrograman fungsional cenderung untuk menulis kode dalam bentuk yang terlalu abstrak ketika programmer sendiri tidak lagi mengerti apa yang dia tulis setelah beberapa saat.
  • Fungsi murni dan I / O tidak benar-benar tercampur.

Kesimpulan


Jika menurut Anda dan tim pengembangan Anda bahwa gaya pengkodean Anda tidak memberi Anda tingkat manajemen kompleksitas yang diperlukan di area bisnis Anda, menyumbat kode Anda dengan sampah sintaksis yang tidak perlu, yang mengarah pada hilangnya waktu, coba pemrograman fungsional. Dengan demikian, di bidang yang terkait dengan sejumlah besar perhitungan atau transformasi data, pemrograman paralel / asinkron, Anda bisa mendapatkan keuntungan yang signifikan, tenggelam dalam pemrograman fungsional.

Menulis kode dalam bahasa fungsional memberi Anda kesempatan untuk melihat masalah dari perspektif yang berbeda, di mana mengembangkan solusi Anda bisa lebih efisien. Dan itu hanya akan meningkatkan jumlah cara untuk mengekspresikan ide-ide Anda.

Ketika mengembangkan solusi Anda menggunakan paradigma pemrograman fungsional, Anda akan mempercepat seluruh proses pengembangan lebih cepat dan lebih cepat, menjadi lebih dan lebih berpengalaman. Sepertinya Anda mengendarai mobil Anda dengan gigi tinggi, dibandingkan dengan bagaimana programer penting bergerak.

Pemrograman fungsional dapat mengubah gaya pengkodean Anda menjadi lebih baik. Tetapi menguasainya cukup sulit dan memakan waktu, dan banyak posting dan tutorial tidak mempertimbangkan detail akun (misalnya, monad, fungsi aplikatif, dll.) Dan tidak memberikan contoh praktis yang akan membantu pemula menggunakan metode pemrograman fungsional yang kuat setiap hari. Tetapi Anda dapat menarik programmer yang berpengalaman ke tim, yang akan menghemat waktu, tenaga, dan uang Anda.

gambar

Jika Anda melakukan semuanya dengan benar, hasilnya akan lebih mudah dimengerti, singkat dan Anda akan memiliki kode yang dapat dibaca. Bukankah itu yang kita semua inginkan?

Roman Taluev,
Pengembang Perangkat Lunak Quasarbyte

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


All Articles