Bedanya Bahasa Fungsional dan Imperatif

Jonas Sunandar
5 min readNov 2, 2020

--

Photo by Markus Spiske on Unsplash

Kalian pernah dengar mengenai functional programming dan imperative programming? Plutus adalah contoh dari bahasa pemrograman fungsional sedangkan Solidity adalah contoh dari bahasa pemrograman imperatif. Apa bedanya sih?

Pengertian

Bahasa Pemrograman Imperatif

Imperative programming adalah sebuah paradigma programming yang menggunakan perintah-perintah untuk mencapai tujuan yang diinginkan. Sehingga program yang dibuat adalah mendeskripsikan seluruh hal yang perlu komputer lakukan untuk mencapai tujuan yang diinginkan.

Dalam pendekatan imperatif, pembuat kode perlu menjelaskan semua langkah yang perlu diambil komputer untuk mencapai tujuan. Semua bahasa pemrograman tradisional seperti C ++, Java, dan bahkan Solidity adalah bahasa pemrograman imperatif. Pendekatan pemrograman semacam ini juga disebut pemrograman algoritmik.

Mari kita ambil contoh. Mari kita lihat bahasa pemrograman C++. Misalkan kita ingin menambahkan angka 5 dan 3.

int a = 5;int b = 3;int c;c = a + b;

Jadi, seperti yang kita bisa lihat di atas, proses penambahan tersebut mengambil alih beberapa langkah dan setiap langkah terus-menerus mengubah state of the program karena semuanya dijalankan secara bergantian.

Proses penjumlahan tersebut terdiri dari empat langkah dan langkah-langkahnya adalah:

  • Mendeklarasikan integer a dan memberikan nilai 5 padanya.
  • Mendeklarasikan integer b dan memberikan nilai 3 padanya.
  • Mendeklarasikan integer c.
  • Menambahkan nilai dari a dan b dan menyimpannya di c.

Bingung? Nanti akan lebih dijelaskan pada contoh kasus.

Bahasa Pemrograman Fungsional

Tipe kedua dari bahasa pemrograman adalah bahasa pemrograman fungsional. Tipe pemrograman ini dibuat untuk membangun pendekatan fungsional dalam pemecahan masalah. Pendekatan semacam ini disebut juga sebagai pemrograman deklaratif.

Jadi, bagaimana cara kerja pemrograman fungsional?

Misalkan ada fungsi f(x) yang ingin kita gunakan untuk menghitung fungsi g(x) dan kemudian kita ingin menggunakannya untuk bekerja dengan fungsi h(x). Alih-alih menyelesaikan semua itu secara berurutan, kita cukup menggabungkan semuanya dalam satu fungsi seperti ini:

h(g(f(x)))

Hal ini membuat pendekatan fungsional lebih mudah untuk melakukan proses nalar secara matematis. Inilah sebabnya mengapa program fungsional seharusnya menjadi pendekatan yang lebih aman untuk pembuatan smart contracts. Bahasa pemrograman fungsional memungkinkan kita untuk melakukan pembuktian secara matematis tentang apa yang dilakukan program dan bagaimana program itu bekerja. Hal ini membuat Plutus menyandang titel “Highly Assurance Code”.

This is precisely why the functional approach is so desirable.

Itulah alasan mengapa Cardano menggunakan bahasa pemrograman Haskell untuk ekosistem mereka dan Plutus untuk smart contractsnya. Haskell dan Plutus adalah bahasa fungsional

Mari kita mulai dari kasus

Agar kamu lebih paham lagi tentang perbedaannya, mari kita ilustrasikan ke dalam kasus. Misal kamu ingin membeli susu di supermarket dan akan menaruh susu yang telah dibeli di dalam kulkas yang ada di rumah.

Photo by Giuseppe Argenziano on Unsplash

Pada imperative programming, kita akan membuat alur kerja dari apa yang akan kita lakukan, contohnya:

  1. Start.
  2. Pergi ke supermarket.
  3. Beli susu.
  4. Masukkan susu ke dalam tas pertama dan kedua(tas bisa di ilustrasikan sebagai array).
  5. Pulang ke rumah.
  6. Masukkan susu ke dalam kulkas.
  7. Stop.

Sangat berbeda dari functional programming, di mana kita lebih menjelaskan secara general dari setiap term yang ada:

  1. Susu adalah minuman sehat yang memiliki banyak vitamin dan kalsium.
  2. Biasanya orang menaruh susu di dalam kulkas.
  3. Kulkas adalah box yang bisa mendinginkan barang yang disimpan di dalamnya.
  4. Supermarket adalah tempat untuk berjualan barang.
  5. Membeli artinya kita menukarkan uang dengan suatu barang atau jasa.
  6. Pergi ke sebuah tempat artinya kita berpindah tempat dari tempat awal ke tempat yang dituju.
  7. Dan lain sebagainya.

Jadi bisa disimpulkan bahwa pada imperative programming kita memerintah komputer untuk melakukan apa yang kita inginkan bahkan sampai memory apa yang harus disimpan dan caranya seperti apa. Sangat berbeda dengan functional programming di mana di sini tidak perlu menjelaskan semua hal secara spesifik, dan nanti hanya menggunakan terms yang sudah di jelaskan untuk kembali digunakan di dalam sebuah program.

Apa sih kelebihan dan kekurangan masing-masing tipe bahasa pemrograman?

Pertama-tama, mari kita mulai dengan pemrograman imperatif.

Bahasa pemrograman imperatif sangat spesial. Mengapa? Operasi pemrograman di sini berorientasi pada sistem. Banyak sekali bahasa pemrograman yang didasarkan pada model pemrograman imperatif sekarang. Tentunya memiliki kelebihan dan kekurangan.

Kelebihan Pemrograman Imperatif

  • Bahasanya cukup mudah dipelajari dan dibaca.
  • Model pemrograman sangat sederhana untuk dipahami oleh orang awam.
  • Fitur aplikasi tertentu dapat dipertimbangkan.

Kekurangan Pemrograman Imperatif

  • Kode menjadi sangat luas.
  • Risiko kesalahan lebih besar saat mengedit.
  • Pembaruan dan ekstensi lebih sulit dilakukan.

Selanjutnya, kita lihat dari sisi pemrograman fungsional.

Keuntungan Pemrograman Fungsional

  • Pemrograman fungsional memperbolehkan kita untuk menulis kode dengan potensi bug yang lebih rendah karena setiap komponen telah diisolasi dan dibuat dalam bentuk fungsi.
  • Karena setiap komponen telah diisolasi, maka proses testing dan debugging akan jauh lebih simpel dan mudah.
  • Penggunaan rekursif dan fungsi first-class membolehkan kita untuk menampilkan bukti sederhana dari struktur kode.
  • Parallelization, lazy evaluation, determinism dan masih banyak lagi.

Pemrograman fungsional termasuk kedalam paradigma menulis kode tanpa merubah state. Mengapa? Karena pemrograman fungsional melakukan pemanggilan fungsi yang dapat menghasilkan hasil yang sama secara berturut-turut. Untuk melakukan implementasi pemrograman fungsional, kita bisa menggunakan berbagai bahasa pemrograman yang mendukung fungsi first-class.

Dengan demikian pemrograman fungsional adalah pemrograman yang mempunyai karakteristik ‘The absence of side effects’. Artinya fungsi yang ditulis tidak bergantung pada data. Pemrograman fungsional juga membawa gaya baru dalam menulis kode sehingga bisa lebih menghemat baris kode.

Kekurangan Pemrograman Fungsional

Pemrograman fungsional memiliki banyak hal yang bisa dibanggakan, tetapi mudah dijelaskan kepada orang lain bukanlah salah satunya. Banyak terminologi yang susah dimengerti karena matematika adalah akar dari pemrograman fungsional. Istilah seperti “pure function” dan “referential preferency” terdengar seperti bahasa alien bagi mereka yang baru mengenal pemrograman fungsional, atau bahkan bagi para veteran fungsional yang belum mempelajari semua istilahnya.

Hal ini mungkin terdengar sepele, tapi menurut saya masalah ini tidak boleh diremehkan. Saya pernah bercakap-cakap dengan rekan kerja di mana kami menghabiskan banyak waktu untuk mendefinisikan apa yang kami katakan, hanya untuk menyadari bahwa kami mengatakan hal yang persis sama.

Kesimpulan

Tiap paradigma pemrograman memiliki kekurangan dan kelebihan mereka masing-masing. Jika kalian ingin menjelaskan seluruh kode secara detail, bisa menggunakan pemrograman imperatif. Sedangkan jika ingin memiliki kepastian yang lebih dan mengurangi celah keamanan, bisa menggunakan bahasa pemrograman fungsional.

Semoga dapat membantu para pembaca untuk memahami perbedaan dari bahasa pemrograman imperatif dengan fungsional.

Contributor: Mohamad Rafi Raihan Rizal

Tentang EMURGO

EMURGO adalah perusahaan blockchain global yang menghadirkan solusi untuk developers, startups, enterprise, dan pemerintah. EMURGO mengembangkan aplikasi dengan standard enterprise, tools untuk developer, berinvestasi di startup, dan memberikan edukasi tentang teknologi blockchain. EMURGO memiliki kantor dan menangani proyek di Singapura, Jepang, Amerika Serikat, India, dan Indonesia. EMURGO juga adalah salah satu pendiri dari Cardano protocol.

Program Sertifikasi Blockchain: Foundations of Blockchain, Ethereum Developer Class

Pelajari lebih lanjut tentang EMURGO dengan mengunjungi website resmi kami di sini

Follow akun media sosial EMURGO Indonesia:

Twitter : http://bit.ly/EmurgotwitterId

Facebook :bit.ly/Emurgo_id

Instagram : http://bit.ly/EmurgoInstaId

Linkedin: http://bit.ly/emurgoidLinkedin

--

--