Pemrograman Fungsional adalah cara pemrograman yang berdasarkan teori fungsi matematika dan berfokus pada hasil komputasi, dimana proses komputasi diperlakukan sebagai evaluasi fungsi-fungsi matematika. Cara pemrograman fungsional bisa menjadikan program lebih ekpresif (menggunakan koding lebih sedikit untuk mengimplementasikan sesuatu ide) sehingga programer dapat menjadi lebih produktif.
Bahasa yang termasuk Functional Programming Language adalah Perl 6, Erlang, Elixir, Lisp, Clojure, Elixir, Elm, F#, Haskell, Idris, Scala.
Beberapa konsep dasar dari FPL:
- Pure FPL tidak menggunakan variabel maupun assignment statement, seperti halnya pada mathematical function. Pemrogram terbebas dari perlunya memahami memory-cell, atau state dari program.
- Tanpa variabel, FPL tidak dapat menyediakan fasilitas perulangan dalam bentuk iterasi, karena iterasi memerlukan variabel pengontrol. Pengulangan harus dilakukan dalam bentuk rekursi.
- Dalam FPL, hasil evaluasi dari suatu fungsi selalu memberikan hasil yang sama selama parameternya sama. Fitur ini disebut referential transparency.
- Walaupun pengulangan dengan recursion berjalan dengan lambat, namun compiler dapat secara otomatis mengkonversi fungsi rekursif tertentu ( yang disebut tail recursion), kedalam fungsi iteratif.
Lambda Calculus dalam Bahasa Pemrograman Fungsional
Lambda calculus menjelaskan secara spesifik parameter-parameter suatu fungsi serta pemetaan (mapping) yang terdapat dalam fungsi tersebut. Lambda calculus secara umum merupakan model penghitungan menggunakan notasi lambda (λ) yang menghasilkan metode mudah dalam mendefinisikan fungsi-fungsi dalam jumlah besar. Notasi lambda (atau disebut sebagai lambda notation) diusulkan oleh Alonzo Church pada tahun 1941. Lambda calculus dapat dituliskan secara langsung maupun tidak langsung. Penulisan lambda calculus secara tidak langsung merupakan inspirasi bagi functional programming languages.
Contoh penggunaan lambda calculus:
λ(x)x+x+x(7) menghasilkan nilai 21. Bentuk tersebut sama dengan 7+7+7.
λ(x)x*x+x(8) menghasilkan nilai 72. Bentuk tersebut sama dengan 8*8+8.
λ(x,y)x-y+y(7,6) bernilai 7. Bentuk tersebut sama dengan 7-6+6.
Dalam LISP menggunakan sintaks (function_name(LAMBDA(arg1 ... argn) expr)).
Perbandingan Antara Bahasa Fungsional dan Imperatif
• Bahasa Imperatif:
- Eksekusi yang efisien
- Semantik kompleks
- Sintaks yang kompleks
- Concurrency dirancang oleh pemrogram
- Semantik sederhana
- Sintaks sederhana
- Eksekusi yang kurang efisien
- Program dapat dibuat secara bersamaan
Comments
Post a Comment