- Ide dasar
- karakteristik
- Fungsi murni
- Fitur kelas satu
- Transparansi referensial
- Pengulangan
- Kekekalan
- Contoh
- Pendekatan imperatif dan deklaratif
- Fungsi murni
- Berfungsi sebagai objek kelas satu
- Keuntungan
- Lebih pendek dan lebih mudah dimengerti
- Tidak ada aliran kontrol
- Kekurangan
- Aplikasi
- Metodologi fungsional
- Bahasa yang mendukung pemrograman fungsional
- D
- Erlang
- Haskell
- ML
- Tujuan Caml
- Skema
- Referensi
The pemrograman fungsional sesuai dengan pemrograman pola didasarkan pada konsep yang menyatakan perilaku program sebagai model matematika fungsional daripada urutan eksplisit instruksi untuk prosesor, yang merupakan konsep utama dalam pemrograman imperatif.
Bahasa fungsional menekankan pernyataan dan istilah daripada mengeksekusi pernyataan. Dalam pemrograman ini, hasilnya hanya akan bergantung pada parameter yang diteruskan ke suatu fungsi, tidak seperti tipe lain yang mematuhi status lokal atau global.
Diagram tentang bagaimana fungsi pemetaan beroperasi dalam bahasa pemrograman fungsional Haskell. Sumber: Oleh Pluke - Karya sendiri, CC0 commons.wikimedia.org.
Namanya berasal dari fungsi matematika, yang merupakan penugasan dari satu set input ke satu set output. Fungsi matematika tidak benar-benar melakukan pekerjaan apa pun, melainkan mendeskripsikan model suatu proses, menjelaskan melalui rumus apa yang dihasilkan sekumpulan input dalam suatu fungsi.
Ide dasar
Fondasi yang mendasari pemrograman fungsional adalah kalkulus lambda, yang dikembangkan selama dekade ketiga abad ke-20 untuk mendefinisikan dan menerapkan fungsi. LISP adalah bahasa pemrograman pertama dari jenisnya, dirancang pada tahun 1960.
Meskipun sebagian besar bahasa pemrograman terdiri dari input, output, dan variabel eksternal yang dapat diatur atau digunakan dari dalam fungsi, pemrograman fungsional menghindarinya. Idenya adalah bahwa setiap kali suatu fungsi dipanggil dengan parameter yang sama, ia harus mengembalikan nilai yang sama.
karakteristik
Bahasa pemrograman fungsional disebut aplikasi, karena fungsi diterapkan pada parameternya, serta deklaratif dan non-prosedural, karena definisi menentukan apa yang harus dihitung dan bukan bagaimana cara menghitungnya.
Fungsi murni
Fungsi adalah murni jika tidak memiliki efek samping yang dapat diamati, seperti mengubah variabel eksternal, perubahan sistem file, dan sebagainya.
Fungsi-fungsi ini dianggap meyakinkan karena tidak akan mengubah variabel apa pun yang mungkin bergantung pada bagian lain dari kode. Tampaknya canggung untuk membuat kode dengan batasan ini, tetapi fungsi ini harus dianggap deterministik, dapat diprediksi, dan dapat disusun.
Fitur kelas satu
Fungsi dianggap sebagai nilai yang dapat diberikan ke variabel, sehingga dapat diteruskan ke dan dikembalikan dari fungsi lain. Artinya, fungsi dapat digunakan seolah-olah itu adalah parameter atau sebagai nilai yang dikembalikan.
Ini menyiratkan bahwa fungsi dapat diteruskan seperti itu, bukan hanya hasil dari fungsi tersebut. Misalnya, pertimbangkan fungsi double (x), yang mengembalikan dua kali nilai parameter inputnya. Jadi, double (2) akan menghasilkan 4.
Karena ini adalah fungsi kelas satu, kode (double (double (2)) akan sama dengan kode double (4). Ini memungkinkan Anda untuk menumpuk satu fungsi sebagai parameter dari yang lain, dan seterusnya.
Transparansi referensial
Ini mengacu pada fakta bahwa dalam pola pemrograman ini tidak ada pernyataan penugasan. Artinya, Anda harus menentukan variabel baru jika ingin menyimpan nilai tambahan. Oleh karena itu, status suatu variabel konstan setiap saat.
Ini menghilangkan kemungkinan sekecil apa pun dari efek yang tidak diinginkan, karena variabel apa pun dapat diganti dengan nilai sebenarnya selama setiap titik pelaksanaan program.
Pengulangan
Dalam pemrograman fungsional tidak ada loop "untuk" dan "sementara". Sebaliknya, iterasi mengandalkan rekursi. Rekursi diimplementasikan menggunakan fungsi rekursif, yang memanggil dirinya sendiri berulang-ulang hingga kasus dasar tercapai.
Kekekalan
Variabel tidak dapat diubah, artinya, variabel tidak dapat diubah setelah diinisialisasi. Meskipun Anda dapat membuat variabel baru, mengubah variabel yang sudah ada tidak diperbolehkan.
Contoh
Pendekatan imperatif dan deklaratif
Dengan contoh Anda dapat menganalisis perbedaan antara pendekatan ini, melakukan operasi yang sama di kedua pengaturan, yaitu menyaring bilangan ganjil dari daftar sambil mengganti 5 untuk bilangan genap kurang dari 5.
Perhitungannya sama, dengan hasil yang sama. Namun, seperti yang Anda lihat, kode imperatifnya bertele-tele dan tidak langsung jelas. Di sisi lain, pendekatan deklaratif dapat dibaca dan eksplisit, karena berfokus pada apa yang ingin Anda dapatkan.
Fungsi murni
Apa yang didefinisikan sebagai fungsi murni dan tidak murni dapat diperjelas dengan beberapa contoh dasar:
Berfungsi sebagai objek kelas satu
Ini berarti menggunakan fungsi dengan cara yang sama seperti data digunakan. Oleh karena itu, mereka dapat diteruskan sebagai parameter ke fungsi lain. Dalam contoh berikut, fungsi int dapat diteruskan sebagai parameter ke fungsi peta:
>>> daftar (peta (int,))
Mereka dapat ditugaskan ke variabel dan dikembalikan. Misalnya, pada kode berikut Anda dapat menetapkan fungsi hello_world, lalu menjalankan variabel sebagai fungsi.
Keuntungan
- Fokus pada apa yang ingin Anda capai (deklaratif) dan bukan pada bagaimana mencapainya (imperatif).
- Mereka tidak berisi pernyataan penugasan, jadi setelah variabel diberi nilai, mereka tidak lagi berubah. Oleh karena itu, program fungsional tidak mengandung efek samping apapun.
- Alur logisnya jelas, karena statusnya kurang tersebar dan tidak dimodifikasi secara implisit.
- Mendukung konsep evaluasi malas, yang artinya nilai hanya dievaluasi dan disimpan bila diperlukan.
- Karena fungsi murni tidak mengubah status apa pun dan sepenuhnya bergantung pada input, fungsi tersebut mudah dipahami. Nilai pengembalian yang diberikan oleh fungsi tersebut sama dengan hasil yang dihasilkan oleh fungsi tersebut.
- Karena sifat fungsi murni untuk menghindari perubahan variabel atau data eksternal, implementasi konkurensi menjadi efektif.
- Fungsi diperlakukan sebagai nilai, diteruskan ke fungsi lain sebagai parameter. Ini meningkatkan pemahaman dan keterbacaan kode.
- Fungsi murni mengambil parameter sekali, menghasilkan keluaran yang tidak dapat diubah. Menggunakan nilai yang tidak dapat diubah membuat proses debug dan pengujian menjadi lebih mudah.
Lebih pendek dan lebih mudah dimengerti
Mereka lebih pendek dan lebih mudah dimengerti daripada perintah. Studi telah menunjukkan bahwa produktivitas programmer rata-rata dalam hal baris kode kurang lebih sama untuk bahasa pemrograman apa pun, yang diterjemahkan ke dalam produktivitas yang lebih tinggi.
Tidak ada aliran kontrol
Memanggil suatu fungsi tidak dapat memiliki efek yang berbeda dari kalkulasi hasilnya. Ini mengesampingkan sumber utama kesalahan, juga membuat urutan eksekusi menjadi tidak relevan, karena tidak ada efek samping yang dapat mengubah nilai ekspresi, dan dapat dievaluasi kapan saja.
Programmer dibebaskan dari beban membangun aliran kendali. Karena ekspresi dapat dievaluasi kapan saja, variabel dapat diganti dengan nilainya.
Otonomi ini membuat program fungsional lebih dapat dikelola secara matematis daripada program konvensional.
Kekurangan
- Paradigma pemrograman fungsional tidak sederhana, sehingga sulit dipahami oleh pemula.
- Sulit untuk dipertahankan, karena banyak objek yang berkembang selama encoding.
- Dalam beberapa kasus, menulis fungsi murni menyebabkan penurunan keterbacaan kode.
- Nilai yang tidak berubah dalam kombinasi dengan rekursi dapat menyebabkan penurunan drastis dalam kinerja sistem.
- Penggunaan kembali sangat rumit dan membutuhkan pemfaktoran ulang yang konstan.
- Menulis program dengan gaya rekursif daripada menggunakan loop atau loop bisa menjadi tugas yang sangat menakutkan.
- Objek mungkin tidak mewakili masalah dengan benar.
- Meskipun menulis fungsi murni ternyata sederhana, menggabungkannya dengan aplikasi lainnya dan dengan operasi masukan / keluaran cukup sulit
Aplikasi
Pemrograman kecerdasan buatan dilakukan dalam bahasa pemrograman fungsional dan teknik kecerdasan buatan bermigrasi ke aplikasi dunia nyata.
Itu juga unggul dalam implementasi model matematika yang kompleks. Untuk alasan ini, salah satu penggunaan utama bahasa fungsional secara tradisional bersifat akademis. Ini berguna untuk mengembangkan spesifikasi yang dapat dieksekusi dan implementasi prototipe.
Banyak bahasa fungsional juga unggul dalam mengimplementasikan pemrosesan paralel. Ini karena kemampuannya untuk memanfaatkan fungsi murni, yang selalu mengembalikan nilai yang sama terlepas dari urutan pelaksanaannya.
Metodologi fungsional
WhatsApp menggunakan bahasa pemrograman Erlang, yang mengikuti model pemrograman fungsional, sehingga memungkinkan lebih dari seratus karyawannya menangani data milik sekitar 1,6 miliar orang.
Pembawa penting lainnya dari gaya pemrograman fungsional adalah Haskell. Ini digunakan oleh Facebook dalam sistem antispamnya. Bahkan JavaScript, salah satu bahasa pemrograman yang paling banyak digunakan, memamerkan properti dari bahasa fungsional yang diketik secara dinamis.
Bahasa yang mendukung pemrograman fungsional
D
Ini dirancang setelah C ++, mendapatkan semua manfaatnya sambil menghilangkan kelemahan yang diamati karena harus kompatibel dengan C.
Erlang
Ini sangat skalabel dan bersamaan, membuatnya ideal untuk telekomunikasi dan aplikasi lain yang menerima data dalam jumlah besar dalam urutan yang tidak dapat diprediksi.
Haskell
Ini adalah bahasa pemrograman fungsional murni, yang menggunakan kalkulus Lambda.
ML
Ini digunakan dalam aplikasi matematika, ilmiah, keuangan, analitis, dan lainnya. Salah satu kelebihannya adalah membuat software untuk menangani program lain.
Tujuan Caml
Ini adalah bahasa open source yang didasarkan pada Caml. Itu cenderung membuat program yang sangat ringan, membantu mereka memuat dan menjalankan lebih cepat daripada yang dibuat oleh bahasa lain.
Skema
Ini didasarkan pada sintaks LISP dan struktur ALGOL. Karena kesederhanaannya, ini digunakan dalam banyak kursus ilmu komputer sebagai pengantar desain program untuk menunjukkan beberapa dasar pemrograman komputer.
Referensi
- Who Is Hosting This (2019). Pelajari Pemrograman Fungsional: Gaya Pengkodean Ini Akan Mengejutkan Pikiran Anda. Diambil dari: whoishostingthis.com.
- Andrea Bertoli (2019). Pengantar Pemrograman Fungsional yang Memadai. Diambil dari: dev.to.
- Hacker Earth (2020). Pemrograman Fungsional. Diambil dari: hackerearth.com.
- Clojure (2020). Pemrograman Fungsional. Diambil dari: clojure.org.
- Akhil Bhadwal (2020). Pemrograman Fungsional: Konsep, Kelebihan, Kekurangan, dan Aplikasi. Retas. Diambil dari: hackr.io.
- Guru99 (2020). Apa itu Pemrograman Fungsional? Tutorial dengan Contoh. Diambil dari: guru99.com.