- Idea asas
- ciri-ciri
- Fungsi murni
- Ciri kelas pertama
- Ketelusan rujukan
- Pengulangan
- Ketidakkekalan
- Contoh
- Pendekatan Imperatif dan deklaratif
- Fungsi murni
- Berfungsi sebagai objek kelas pertama
- Kelebihan
- Lebih pendek dan senang difahami
- Tiada aliran kawalan
- Kekurangan
- Permohonan
- Metodologi fungsional
- Bahasa yang menyokong pengaturcaraan berfungsi
- D
- Erlang
- Haskell
- ML
- Objektif Caml
- Skim
- Rujukan
The Pengaturcaraan kefungsian sepadan dengan pengaturcaraan corak adalah berdasarkan kepada konsep yang menyatakan tingkah laku program sebagai model matematik berfungsi bukannya urutan jelas arahan untuk pemproses, yang merupakan konsep utama dalam pengaturcaraan penting.
Bahasa fungsional menekankan pernyataan dan istilah daripada melaksanakan pernyataan. Dalam pengaturcaraan ini, hasilnya hanya akan bergantung pada parameter yang diteruskan ke fungsi, tidak seperti jenis lain yang mematuhi keadaan lokal atau global.
Diagram bagaimana fungsi pemetaan beroperasi dalam bahasa pengaturcaraan fungsional Haskell. Sumber: Oleh Pluke - Karya sendiri, CC0 commons.wikimedia.org.
Namanya berasal dari fungsi matematik, yang merupakan penugasan satu set input ke satu set output. Fungsi matematik tidak benar-benar melakukan apa-apa kerja, melainkan menggambarkan model proses, menjelaskan dengan cara formula apa yang dihasilkan oleh satu set input dalam suatu fungsi.
Idea asas
Asas di mana pengaturcaraan fungsional didasarkan adalah kalkulus lambda, yang dikembangkan selama dekad ketiga abad ke-20 untuk menentukan dan menerapkan fungsi. LISP adalah bahasa pengaturcaraan pertama seumpamanya, yang dirancang pada tahun 1960.
Walaupun kebanyakan bahasa pengaturcaraan terdiri dari input, output, dan variabel luaran yang dapat diset atau digunakan dari dalam fungsi, pengaturcaraan fungsional menghindari hal ini. Ideanya adalah bahawa setiap kali fungsi dipanggil dengan parameter yang sama, ia harus mengembalikan nilai yang sama.
ciri-ciri
Bahasa pengaturcaraan fungsional disebut aplikasi, karena fungsinya diterapkan pada parameternya, serta deklaratif dan non-prosedural, kerana definisi menentukan apa yang akan dihitung dan bukan bagaimana ia dihitung.
Fungsi murni
Fungsi murni apabila tidak mempunyai kesan sampingan yang dapat dilihat, seperti mengubah pemboleh ubah luaran, perubahan sistem fail, dan sebagainya.
Fungsi-fungsi ini dianggap meyakinkan kerana mereka tidak akan secara jelas mengubah pemboleh ubah yang mungkin bergantung pada bahagian lain dari kod pada suatu ketika. Nampaknya canggung untuk membuat kod dengan kekangan ini, tetapi fungsi-fungsi ini harus dianggap deterministik, dapat diramalkan, dan dapat digabungkan.
Ciri kelas pertama
Fungsi dianggap sebagai nilai yang dapat diberikan kepada pembolehubah, 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 bahawa fungsi tersebut dapat diteruskan dengan demikian, bukan hanya hasil fungsi tersebut. Sebagai contoh, pertimbangkan fungsi ganda (x), yang mengembalikan dua kali nilai parameter inputnya. Oleh itu, dua (2) akan mengembalikan 4.
Oleh kerana ia adalah fungsi kelas pertama, kod (double (double (2)) akan sama dengan kod double (4). Ini membolehkan anda meletakkan satu fungsi sebagai parameter yang lain, dan seterusnya.
Ketelusan rujukan
Ini merujuk kepada kenyataan bahawa dalam corak pengaturcaraan ini tidak ada penyataan tugasan. Maksudnya, anda mesti menentukan pemboleh ubah baru jika anda ingin menyimpan nilai tambahan. Oleh itu, keadaan pemboleh ubah tetap pada setiap masa.
Ini menghilangkan kemungkinan sedikit kesan yang tidak diingini, kerana sebarang pemboleh ubah dapat diganti dengan nilai sebenarnya selama titik pelaksanaan program.
Pengulangan
Dalam pengaturcaraan fungsional tidak ada gelung "untuk" dan "sambil". Sebaliknya, lelaran bergantung pada pengulangan. Recursion dilaksanakan dengan menggunakan fungsi recursive, yang menyebut diri mereka berulang-ulang sehingga case base tercapai.
Ketidakkekalan
Pemboleh ubah tidak dapat diubah, iaitu tidak mungkin memodifikasi pemboleh ubah setelah diinisialisasi. Walaupun anda boleh membuat pemboleh ubah baru, mengubah pemboleh ubah yang ada tidak dibenarkan.
Contoh
Pendekatan Imperatif dan deklaratif
Dengan contoh anda boleh menganalisis perbezaan antara pendekatan ini, melakukan operasi yang sama dalam kedua susunan, iaitu menyaring nombor ganjil dari senarai sambil menggantikan 5 dengan nombor genap kurang dari 5.
Ini adalah pengiraan yang sama, dengan hasil yang sama. Namun, seperti yang anda lihat, kod penting adalah verbose dan tidak jelas. Sebaliknya, pendekatan deklaratif dapat dibaca dan eksplisit, kerana memfokuskan pada apa yang anda ingin dapatkan.
Fungsi murni
Apa yang ditakrifkan sebagai fungsi murni dan tidak murni dapat dijelaskan dengan beberapa contoh asas:
Berfungsi sebagai objek kelas pertama
Ini bermaksud menggunakan fungsi dengan cara yang sama seperti data yang digunakan. Oleh itu, mereka boleh diteruskan sebagai parameter ke fungsi lain. Dalam contoh berikut, fungsi int dapat diteruskan sebagai parameter ke fungsi peta:
>>> senarai (peta (int,))
Mereka boleh diberikan kepada pemboleh ubah dan dikembalikan. Sebagai contoh, dalam kod berikut, anda boleh menetapkan fungsi hello_world, kemudian jalankan pemboleh ubah sebagai fungsi.
Kelebihan
- Fokus pada apa yang anda ingin capai (deklaratif) dan bukan pada bagaimana mencapainya (mustahak).
- Mereka tidak mengandungi pernyataan tugasan, jadi setelah pemboleh ubah diberi nilai, mereka tidak akan berubah lagi. Oleh itu, program fungsional tidak mengandungi kesan sampingan.
- Aliran logik jelas, kerana keadaannya kurang tersebar dan tidak diubah secara tersirat.
- Menyokong konsep penilaian malas, yang bermaksud bahawa nilainya hanya dinilai dan disimpan apabila perlu.
- Oleh kerana fungsi murni tidak mengubah keadaan apa pun dan bergantung sepenuhnya pada input, fungsi ini mudah difahami. Nilai pulangan yang diberikan oleh fungsi tersebut adalah sama dengan hasil yang dihasilkan oleh mereka.
- Oleh kerana sifat fungsi murni untuk mengelakkan pemboleh ubah atau data luaran berubah, pelaksanaan serentak menjadi efektif.
- Fungsi dianggap sebagai nilai, meneruskan fungsi lain sebagai parameter. Ini meningkatkan pemahaman dan kebolehbacaan kod.
- Fungsi murni mengambil parameter sekali, menghasilkan output yang tidak berubah. Menggunakan nilai yang tidak berubah menjadikan proses penyahpepijatan dan pengujian lebih mudah.
Lebih pendek dan senang difahami
Mereka lebih pendek dan lebih mudah difahami daripada yang mustahak. Kajian menunjukkan bahawa rata-rata produktiviti pengaturcara dari segi garis kod lebih kurang sama dengan mana-mana bahasa pengaturcaraan, yang diterjemahkan menjadi produktiviti yang lebih tinggi.
Tiada aliran kawalan
Memanggil fungsi tidak boleh memberi kesan yang berbeza daripada perhitungan hasilnya. Ini mengesampingkan sumber utama kesalahan, juga membuat urutan pelaksanaan tidak relevan, kerana tidak ada efek samping yang dapat mengubah nilai ekspresi, dan dapat dinilai setiap saat.
Pengaturcara dibebaskan dari beban mewujudkan aliran kawalan. Oleh kerana ungkapan dapat dinilai setiap saat, pemboleh ubah dapat diganti dengan nilainya.
Autonomi ini menjadikan program fungsional lebih terkawal secara matematik daripada program konvensional.
Kekurangan
- Paradigma pengaturcaraan fungsional tidak mudah, jadi sukar bagi pemula untuk memahami.
- Sukar dijaga, kerana banyak objek berkembang semasa pengekodan.
- Dalam beberapa kes, menulis fungsi murni menyebabkan pengurangan pembacaan kod.
- Nilai tidak berubah dalam kombinasi dengan rekursi boleh menyebabkan penurunan prestasi sistem yang drastik.
- Penggunaan semula sangat rumit dan memerlukan pemfaktoran berterusan.
- Menulis program dengan gaya rekursif dan bukannya menggunakan gelung atau gelung boleh menjadi tugas yang sangat menakutkan.
- Objek mungkin tidak mewakili masalah dengan betul.
- Walaupun menulis fungsi murni ternyata mudah, menggabungkannya dengan aplikasi yang lain dan dengan operasi input / output agak sukar
Permohonan
Pengaturcaraan kecerdasan buatan dilakukan dalam bahasa pengaturcaraan fungsional dan teknik kecerdasan buatan berpindah ke aplikasi dunia nyata.
Ini juga cemerlang dalam pelaksanaan model matematik yang kompleks. Atas sebab ini, salah satu penggunaan utama bahasa fungsional secara tradisional adalah akademik. Ini berguna untuk mengembangkan spesifikasi yang dapat dilaksanakan dan implementasi prototaip.
Banyak bahasa berfungsi juga unggul dalam melaksanakan pemprosesan selari. Ini disebabkan kemampuannya untuk memanfaatkan fungsi murni, yang selalu mengembalikan nilai yang sama tanpa mengira urutan pelaksanaannya.
Metodologi fungsional
WhatsApp menggunakan bahasa pengaturcaraan Erlang, yang mengikuti model pengaturcaraan fungsional, sehingga memungkinkan lebih dari seratus pekerjanya menangani data yang dimiliki oleh sekitar 1.6 bilion orang.
Pembawa penting lain dari gaya pengaturcaraan berfungsi ialah Haskell. Ia digunakan oleh Facebook dalam sistem antispamnya. Bahkan JavaScript, salah satu bahasa pengaturcaraan yang paling banyak digunakan, memaparkan sifat bahasa berfungsi yang ditaip secara dinamik.
Bahasa yang menyokong pengaturcaraan berfungsi
D
Ia direka bentuk selepas C ++, mendapatkan semua faedahnya sambil menghilangkan kelemahan yang dilihat kerana harus serasi dengan C.
Erlang
Ini sangat berskala dan serentak, menjadikannya ideal untuk telekomunikasi dan aplikasi lain yang menerima sejumlah besar data dalam urutan yang tidak dapat diramalkan.
Haskell
Ini adalah bahasa pengaturcaraan fungsional murni, yang menggunakan kalkulus Lambda.
ML
Ia digunakan dalam aplikasi matematik, saintifik, kewangan, analitis dan lain-lain. Salah satu kelebihannya ialah membuat perisian untuk mengendalikan program lain.
Objektif Caml
Ini adalah bahasa sumber terbuka yang berdasarkan Caml. Ia cenderung untuk membuat program yang sangat ringan, membantunya memuat dan berjalan lebih cepat daripada yang dibuat oleh bahasa lain.
Skim
Ia berdasarkan sintaks LISP dan struktur ALGOL. Kerana kesederhanaan, ia digunakan dalam banyak kursus sains komputer sebagai pengenalan kepada rancangan program untuk menunjukkan beberapa asas pengaturcaraan komputer.
Rujukan
- Siapa yang Menjamu Ini (2019) Pelajari Pengaturcaraan Berfungsi: Gaya Pengekodan Ini Akan Menenangkan Fikiran Anda. Diambil dari: whoishostingthis.com.
- Andrea Bertoli (2019). Pengenalan yang mencukupi untuk Pengaturcaraan Berfungsi. Diambil dari: dev.to.
- Bumi Peretas (2020). Pengaturcaraan Berfungsi. Diambil dari: hackerearth.com.
- Clojure (2020). Pengaturcaraan Berfungsi. Diambil dari: clojure.org.
- Akhil Bhadwal (2020). Pengaturcaraan Fungsional: Konsep, Kelebihan, Kekurangan, dan Aplikasi. Hack. Diambil dari: hackr.io.
- Guru99 (2020). Apa itu Pengaturcaraan Fungsional? Tutorial dengan Contoh. Diambil dari: guru99.com.