Apa sebenarnya yang dimaksud pemrograman Fungsional? Pemrograman Fungsional adalah cara pemrograman yang berdasarkan teori fungsi matematika, 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 pemrograman fungsional yang pertama adalah LISP yang dirancang oleh John McCarty pada tahun 1956 – 1958 dan mulai diimplementasikan pada tahun 1959. LISP banyak digunakan dalam bidang Artificial Intellegence dan juga mempengaruhi beberapa bahasa pemrograman lainnya. Salah satunya adalah Logo, bahasa fungsional yang ditujukan untuk mengajarkan matematika secara mudah. Di USA, biasanya matakuliah pengantar ilmu komputer menggunakan bahasa Scheme, yang tidak lain adalah dialek dari LISP, misalnya di MIT, Yale dan Berkeley. Scheme didesain agar bahasa inti nya sekecil dan sesederhana mungkin. Hal ini memiliki manfaat yang jelas untuk pengajaran bahasa pemrograman. Sampai saat ini, terutama di Indonesia, dunia pemrograman baik di bidang akademik maupun industri dikuasai oleh paradigma pemrograman prosedural terutama dari bahasa C dan perkembangannya yaitu paradigma berorientasi objek misalnya dengan bahasa C++, Objective-C, Java dan C#.

 

Dalam tulisan ini tidak akan dibahas mengenai LISP, Scheme atau LOGO, tetapi akan dibahas mengenai bahasa pemrograman fungsional yang paling banyak digunakan oleh programmer (walau seringkali tidak disadari paradigma fungsionalnya) yaitu Javascript. Mula-mula Javascript yang diciptakan oleh Netscape bertujuan melengkapi bahasa Java pada pemrograman web dengan menarik untuk programmer nonprofesional pada pemrograman sisi client, sehingga sintaks Javascript banyak diambil dari bahasa C dan juga menyamar seolah-olah sebagai bahasa prosedural sampai programmer siap untuk pindah ke tingkat berikutnya yaitu pemrograman fungsional. Sebenarnya prinsip-prinsip desain kunci dalam JavaScript diambil dari bahasa pemrograman Self dan Scheme, yang bukan lain adalah bahasa pemrograman fungsional. Sehingga tanpa memahami paradigma fungsional ini, banyak programmer akan gagal memahami script yang ditulis dalam bahasa Javascript dengan baik.

 

“JavaScript is the world’s most misunderstood programming language. It is the most popular programming language in the world, while at the same time being one of the least liked. In JavaScript there is a beautiful, highly expressive language that is buried under a steaming pile of good intentions and blunders. The best nature of JavaScript was so effectively hidden that for many years the prevailing opinion of JavaScript was that it was an unsightly, incompetent abomination. JavaScript is a functional language. It is the first lambda language to be accepted by the mainstream.” [Douglas Crockford]

Apa sebenarnya arti JavaScript adalab bahasa fungsional? “Fungsional” di sini semata-mata menggambarkan ciri khusus pada cara pemrograman yaitu terutama fitur first-class functions yang maksudnya adalah memperlakukan fungsi sebagai objek kelas-pertama. Secara khusus, hal ini berarti dalam bahasa fungsional, fungsi dapat dilewatkan sebagai argumen bagi fungsi lainnya, mendapatkan kembali fungsi sebagai hasil operasi dari fungsi lainnya dan juga dapat menugaskan fungsi sebagai variabel dan kemudian menyimpannya dalam struktur data.

 Untuk lebih jelasnya perhatikan contoh dibawah ini

Procedural Functions

Pada awalnya ada adalah fungsi …

function hello(who) {

   alert(‘Hello ‘+who);   // outputs “Hello world”

}

hello(‘world’);

Hampir setiap bahasa pemrograman memiliki sebuah konstruksi mirip dengan ini. Setiap programmer di dunia ini nyaman dengan sintaks ini. “Hello” adalah nama dari fungsi, tetapi apa yang terjadi jika fungsi “hello” dibuat sama sebagai nama variabel?

Functions As Variables

Ini mungkin sedikit asing dalam sintaks tetapi kebanyakan programmer sudah biasa  dengan fungsi yang didefinisikan seperti sebuah variabel.

var hello = function (who) {

   alert(‘Hello ‘+who);      // outputs “Hello world”

}

hello(‘world’);

Tidak ada perbedaan besar di sini, hanya menambahkan tag  “var” dan hanya menggeser  fungsi “hello”, segala sesuatu yang lain adalah sama. Tetapi lihatlah definisi itu lagi. Konstruksi ini sebenarnya mempunyai arti sesuatu. Ini berarti bahwa fungsi tersebut sekarang akan mengikuti aturan yang sama dan kemampuan sebagai variabel lain di Javascript. Hal ini berarti pulafungsi “hello” tersebut dapat  dikirimkan ke fungsi-fungsi lain seperti halnya variabel lainnya.

Passing Functions To Functions

Jika kita mendeklarasikan “hello” seperti sebuah variabel, maka fungsi tersebut dapat dilewatkan pada fungsi yang lain:

var say = function(what) {

   what(‘say function’);

}

var hello = function (who) {

   alert(‘Hello ‘+who);      // outputs “Hello say function”

}

say(hello);

Jadi dalam Javascript fungsi dapat dilewatkan seperti halnya  array atau variabel lainnya. Ada dua cara untuk menggunakan fungsi sebuah sebagai argumen. Pertama dapat melewatkan pointer ke fungsi itu sendiri, atau kedua dapat mengeksekusi fungsi dalam panggilan dan melewatkan  hasil dari fungsi tersebut. Contoh di atas melewati sebuah pointer  dari fungsi “hello” pada variabel “what” dalam fungsi “say”. Variabel  “what” kemudian menjadi pointer untuk fungsi ” hello “.

Untuk membandingkan kedua cara untuk menggunakan fungsi sebagai argumen, perhatikan contoh berikut ini:

var test = function () {

   return “This is a String”;

}

var testCopy = test;      // testCopy is a pointer to the test function()

var testStr = test();     // testStr contains “This is a string”

var testing = testCopy(); // testing contains “This is a string”

Perhatikan bahwa jika nama fungsi tidak diikuti dengan argumen tanda kurung maka fungsi dilewatkan sebagai pointer. Tetapi Jika nama fungsi diikuti dengan argumen tanda kurung, Javascript akan menjalankan fungsi dan menyampaikan nilai kembali dari fungsi.

Fungsi, dalam Javascript, adalah juga sekaligus sebuah objek. Sehingga selain memiliki fungsi sendiri, maka juga Anda memiliki objek fungsi,  yang berarti  memiliki metode dan properti sebagai objek, yang selanjutnya dapat diperluas oleh programmer sesuai kebutuhan.

Setiap fungsi memiliki properti berikut …

  • arguments – Sebuah array / objek yang mengandung argumen dilewatkan ke fungsi
    • arguments.length – menyimpan sejumlah argumen dalam array
    • arguments.callee – pointer ke fungsi pelaksana (memungkinkan fungsi anonim untuk rekursi).
  • constructor – fungsi pointer ke fungsi konstruktor.
  • length – jumlah argumen fungsi
  • prototype – memungkinkan penciptaan prototipe

Setiap fungsi memiliki metode berikut …

  • apply – sebuah metode yang memungkinkan Anda lebih easilly melewati argumen fungsi.
  • call – memungkinkan Anda untuk memanggil fungsi dalam konteks yang berbeda.
  • toSource – mengembalikan kode sumber dari sebuah objek.
  • toString – mengembalikan sumber fungsi sebagai string.
  • valueOf – Mengembalikan nilai primitif dari objek Boolean

 

Jika Anda telah menguasai konsep melewatkan fungsi sebagai argumen ke fungsi lain maka sekarang anda telah mengerti jargon “lambda” yang pada dasarnya hanya berarti menggunakan fungsi sebagai argumen dalam panggilan ke fungsi lain. Lambda adalah kata kunci yang digunakan dalam pemrograman fungsional dan itu sebenarnya hanya berarti melewatkan fungsi sebagai argumen.

Future Javascript

 

Karena hampir semua perangkat komputasi seperti komputer, tablet, smartphone dapat menjalankan web browser, maka aplikasi JavaScript dapat dikatakan sangat serbaguna. Dengan makin cepatnya intepreter javascript yang baru (V8) maka aplikasi asli untuk IOS, Android, BlackBerry dan bahkan desktop menjadi tidak berbeda jauh dengan sebuah aplikasi web. Padahal untuk membangun aplikasi asli diperlukan kode  dalam bahasa yang beraneka ragam sehingga membuat biaya pengembangan aplikasi sangat mahal. Oleh karena itu teknologi HTML5 dan Javascript yang mendukung Cross-Platform mempunyai masa depan yang cerah di kemudian hari dalam pengembangan aplikasi pada semua perangkat komputasi.

Sumber:

1. http://en.wikipedia.org/wiki/JavaScript

2. http://www.hunlock.com/blogs/Functional_Javascript

3. http://www.vml.com/news-and-trends/articles/future-javascript-based-applications

Penulis : Alexander Agung Santoso Gunawan