Karakteristik pemrograman fungsional, contoh, keuntungan, kerugian

Karakteristik pemrograman fungsional, contoh, keuntungan, kerugian

Itu Pemrograman fungsional Ini sesuai dengan pola pemrograman yang didasarkan pada konsep menyatakan proses program sebagai model fungsional matematika daripada sebagai urutan eksplisit instruksi untuk prosesor, yang merupakan konsep utama dalam pemrograman imperatif.

Bahasa fungsional menekankan kalimat dan istilah alih -alih menjalankan instruksi. Dalam program ini, hasilnya hanya akan tergantung pada parameter yang diteruskan ke fungsi, tidak seperti jenis lain yang mematuhi negara bagian atau global.

Bagaimana fungsi pemetaan dalam bahasa pemrograman fungsional Haskell beroperasi. Sumber: Oleh Pluke - Pekerjaan Sendiri, CC0 Commons.Wikimedia.org.

Namanya berasal dari fungsi matematika, yang merupakan alokasi serangkaian entri ke satu set output. Fungsi matematika benar -benar tidak berfungsi, tetapi menggambarkan model suatu proses, menjelaskan melalui rumus apa yang dihasilkan serangkaian entri dalam suatu fungsi.

[TOC]

Ide Dasar

Fondasi yang menjadi dasar pemrograman fungsional adalah perhitungan Lambda, yang dikembangkan selama dekade ketiga abad kedua puluh untuk mendefinisikan dan menerapkan fungsi. Lisp adalah bahasa pemrograman pertama dari jenis ini, yang dirancang pada tahun 1960.

Meskipun sebagian besar bahasa pemrograman terdiri dari entri eksternal, output dan variabel yang dapat dikonfigurasi atau digunakan dari fungsi, pemrograman fungsional mencegahnya. 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 berlaku untuk parameternya, selain deklaratif dan non -procedural, karena definisi menentukan apa yang ingin Anda hitung dan bukan bagaimana hal itu dihitung.

Fungsi murni

Fungsi murni ketika tidak memiliki efek samping yang dapat diamati, seperti perubahan variabel eksternal, perubahan dalam sistem file, dll.

Fungsi -fungsi ini dianggap meyakinkan, karena mereka tidak akan secara tegas mengubah variabel apa pun di mana bagian lain dari kode dapat bergantung pada suatu waktu. Tampaknya tidak nyaman kodifikasi dengan pembatasan ini, tetapi harus dipertimbangkan bahwa fungsi -fungsi ini bersifat deterministik, dapat diprediksi dan komponen.

Fungsi kelas satu

Fungsi dianggap sebagai nilai yang dapat ditugaskan ke variabel, sehingga mereka dapat meneruskannya dan kembali dari fungsi lain. Yaitu, fungsi dapat digunakan seolah -olah itu adalah parameter atau sebagai nilai yang dikembalikan.

Ini menyiratkan bahwa fungsi dapat ditransmisikan seperti itu, bukan hanya hasil fungsi. Misalnya, pertimbangkan fungsi ganda (x), yang mengembalikan dua kali nilai parameter inputnya. Dengan demikian, ganda (2) akan kembali 4.

Itu dapat melayani Anda: evolusi pemeliharaan industri: dari asal ke masa kini

Seperti fungsi kelas satu, kode (ganda (ganda (2)), akan sama dengan kode ganda (4). Ini memungkinkan untuk menyatukan fungsi sebagai parameter orang lain dan sebagainya.

Transparansi referensial

Ini mengacu pada fakta bahwa dalam pola pemrograman ini tidak ada kalimat penugasan. Yaitu, variabel baru harus didefinisikan jika nilai tambahan diinginkan. Oleh karena itu, keadaan variabel adalah konstan setiap saat.

Ini menghilangkan kemungkinan sedikit pun dari efek yang tidak diinginkan, karena variabel apa pun dapat digantikan dengan nilai sebenarnya selama titik eksekusi program apa pun.

Pengulangan

Dalam pemrograman fungsional tidak ada loop "untuk" dan "sementara". Sebaliknya, iterasi tergantung pada rekursi. Rekursi diimplementasikan menggunakan fungsi rekursif, yang menyebut diri mereka berulang kali sampai case dasar tercapai.

Kekekalan

Variabel tidak dapat diubah, yaitu, tidak mungkin untuk memodifikasi variabel setelah diinisialisasi. Meskipun variabel baru dapat dibuat, variabel yang ada tidak diperbolehkan.

Contoh

Pendekatan imperatif dan deklaratif

Dengan contoh, perbedaan antara pendekatan ini dapat dianalisis, melakukan operasi yang sama di kedua ketentuan, yaitu untuk memfilter angka ganjil dari daftar sementara angka yang lebih kecil dari 5 digantikan oleh 5.

Itu adalah perhitungan yang sama, dengan hasil yang sama. Namun, seperti yang dapat dilihat, kode imperatif terperinci dan tidak segera jelas. Di sisi lain, pendekatan deklaratif dapat dibaca dan eksplisit, karena berfokus pada apa yang ingin Anda peroleh.

Fungsi murni

Anda dapat memperjelas apa yang didefinisikan sebagai fungsi murni dan tidak murni dengan beberapa contoh dasar:

Fungsi seperti objek kelas satu

Berarti menggunakan fungsi dengan cara yang sama dengan data digunakan. Oleh karena itu, mereka dapat meneruskan sebagai parameter ke fungsi lain. Dalam contoh berikut Anda dapat meneruskan fungsi int sebagai parameter ke fungsi peta:

>>> Daftar (peta (int, ["1", "2", "3"]))

[1, 2, 3]

Mereka dapat ditugaskan ke variabel dan mengembalikannya. Misalnya, kode berikut dapat ditetapkan fungsi hello_world, lalu menjalankan variabel sebagai fungsi.

Keuntungan

- Fokus pada apa yang ingin Anda capai (deklaratif) dan bukan bagaimana mencapainya (imperatif).

- Mereka tidak mengandung kalimat alokasi, jadi setelah variabel diberi nilai, mereka tidak akan lagi berubah. Oleh karena itu, program fungsional tidak mengandung efek samping.

Dapat melayani Anda: bencana teknologi

- Aliran logis jelas, karena negara kurang tersebar dan tidak dimodifikasi secara implisit.

- Mengakui konsep evaluasi yang ditangguhkan, yang berarti bahwa nilainya hanya dievaluasi dan disimpan bila perlu.

- Karena fungsi murni tidak mengubah keadaan apa pun dan sepenuhnya bergantung pada pintu masuk, mereka mudah dimengerti. Nilai pengembalian yang diberikan oleh fungsi -fungsi seperti itu sama dengan hasil yang dihasilkan oleh mereka.

- Karena sifat fungsi murni untuk mencegah variabel atau data eksternal dari perubahan, implementasi persetujuan menjadi efektif.

- Fungsi diperlakukan sebagai nilai, pindah ke fungsi lain seperti parameter. Ini meningkatkan pemahaman dan keterbacaan kode.

- Fungsi murni mengambil parameter sekali, menghasilkan jalan keluar yang tidak berubah. Dengan menggunakan nilai yang tidak dapat diubah, pemurnian dan tes difasilitasi.

Lebih pendek dan lebih mudah dimengerti

Mereka lebih pendek dan lebih mudah dipahami daripada keharusan. Studi telah menunjukkan bahwa rata -rata produktivitas programmer dalam hal lini kode kurang lebih sama untuk setiap bahasa pemrograman, menerjemahkan dalam produktivitas yang lebih besar.

Tidak ada aliran kontrol

Saat memanggil suatu fungsi, Anda tidak dapat memiliki efek yang berbeda dari perhitungan hasilnya. Ini mengesampingkan sumber kesalahan yang penting, juga membuat perintah eksekusi tidak relevan, karena tidak ada efek samping yang dapat mengubah nilai ekspresi, dapat dievaluasi kapan saja.

Programmer menenangkan beban untuk membangun aliran kontrol. Karena ekspresi dapat dievaluasi kapan saja, variabel dapat diganti dengan nilainya.

Otonomi ini mendukung bahwa program fungsional lebih dapat dikelola secara matematis daripada program konvensional.

Kerugian

- Paradigma pemrograman fungsional tidak sederhana, jadi menjadi sulit untuk dipahami bagi seorang pemula.

- Sulit dipertahankan, karena selama pengkodean banyak objek berkembang.

- Dalam beberapa kasus, saat menulis fungsi murni pengurangan dalam keterbacaan kode disebabkan.

- Nilai kekambuhan dalam kombinasi dengan rekursi dapat menyebabkan pengurangan drastis dalam kinerja sistem.

- Penggunaan kembali sangat rumit dan membutuhkan refactorisasi konstan.

- Menulis program dengan gaya rekursif alih -alih menggunakan ikatan atau loop bisa menjadi tugas yang sangat mengecewakan.

- Objek mungkin tidak mewakili masalah dengan benar.

Ini dapat melayani Anda: 50 blog video game yang disarankan

- Meskipun menulis fungsi murni ternyata sederhana, menggabungkannya dengan sisa aplikasi dan dengan operasi input/output cukup sulit

Aplikasi

Program kecerdasan buatan dilakukan dalam bahasa pemrograman fungsional dan teknik kecerdasan buatan bermigrasi ke aplikasi dunia nyata.

Juga menonjol dalam implementasi model matematika yang kompleks. Karena alasan ini, salah satu penggunaan utama bahasa fungsional secara tradisional adalah akademis. Ini berguna untuk mengembangkan spesifikasi yang dapat dieksekusi dan implementasi prototipe.

Banyak bahasa fungsional juga menonjol untuk mengimplementasikan pemrosesan paralel. Ini karena kemampuannya untuk memanfaatkan fungsi murni, yang selalu mengembalikan nilai yang sama terlepas dari urutan yang dieksekusi.

Metodologi fungsional

WhatsApp menggunakan bahasa pemrograman Erlag, yang mengikuti model pemrograman fungsional, yang memungkinkan lebih dari seratus karyawannya untuk menangani data yang termasuk sekitar 1.600 juta orang.

Pembawa penting lainnya dari gaya pemrograman fungsional adalah Haskell. Ini digunakan oleh Facebook di sistem antispam Anda. Bahkan JavaScript, salah satu bahasa pemrograman yang paling banyak digunakan, menawarkan sifat -sifat bahasa fungsional yang dinamis.

Bahasa yang mendukung pemrograman fungsional

D

Itu dirancang setelah C ++, mendapatkan semua manfaatnya saat menghilangkan kelemahannya yang diamati karena harus kompatibel dengan c.

Erlang

Ini sangat terukur dan bersamaan, membuatnya ideal untuk telekomunikasi dan aplikasi lain yang menerima sejumlah besar data dalam urutan yang tidak dapat diprediksi.

Haskell

Ini adalah bahasa pemrograman fungsional murni, yang menggunakan perhitungan lambda untuk itu.

Ml

Ini digunakan dalam jenis matematika, ilmiah, keuangan, analitik dan lainnya. Salah satu kekuatannya adalah membuat perangkat lunak untuk menangani program lain.

CAML objektif

Ini adalah bahasa open source yang didasarkan pada CAML. Itu cenderung membuat program yang sangat ringan, membantu mereka dimuat dan dieksekusi lebih cepat daripada yang dibuat oleh bahasa lain.

Skema

Ini didasarkan pada sintaks LISP dan struktur algol. Berkat kesederhanaannya, ini digunakan dalam banyak kursus komputer sebagai pengantar desain program untuk menunjukkan beberapa fondasi pemrograman komputer.

Referensi

  1. Whho hosting ini (2019). Pelajari Pemrograman Fungsional: Gaya pengkodean ini akan membuat Anda tersedot. Diambil dari: whoisningthis.com.
  2. Andrea Bertoli (2019). Pengantar yang memadai untuk program Fungsional. Diambil dari: dev.ke.
  3. Hacker Earth (2020). Pemrograman fungsional. Diambil dari: Hakereph.com.
  4. Clojure (2020). Pemrograman fungsional. Diambil dari: clojure.org.
  5. Akhil Bhadwal (2020). Pemrograman Fungsional: Konsep, Adventages, Kekurangan, dan Aplikasi. Hackr. Diambil dari: hackr.Io.
  6. Guru99 (2020). Apa itu pemrograman fungsional? Dengan contoh tutorial. Diambil dari: guru99.com.