Satu Bulan Belajar Pemrograman Fungsional

Reyhan Alhafizal
3 min readOct 3, 2019

--

Haskell code
Source: https://blogg.bekk.no/creating-a-repl-in-haskell-efcdef1deec2

Saat mempersiapkan semester 5, saya tertarik pada pada mata kuliah pemrograman fungsional karena pemrograman fungsional atau functional programming (selanjutnya akan saya singkat FP) adalah paradigma pemrograman yang baru bagi saya. Namun, setelah saya pelajari paradigma fungsional tidak semudah yang saya bayangkan sebelumnya.

Minggu 1:

Pada awal pertemuan, dosen saya — Pak Ade — menjelaskan apa itu FP dan kenapa kita perlu menggunakannya. Pada FP, semuanya adalah sebuah fungsi (mungkin tidak semuanya juga, sih). Menggunakan FP , kita dapat membuat software yang terdiri dari fungsi-fungsi matematis yang menerima parameter dan mengembalikan nilai yang dapat dibuktikan secara matematis tanpa mengubah variabel apapun. Hal ini membuat kode FP lebih predictable dan lebih mudah dites daripada imperatif.

Pada FP, kita akan lebih fokus pada what bukan how. Alih-alih menjelaskan apa saja yang perlu dilakukan, kita hanya perlu mendeklarasi ekspresi yang dapat memenuhi fungsi yang kita inginkan.

Misalnya untuk menjumlahkan seluruh angka pada list, FP menggunakan pendekatan rekursif tidak seperti imperatif yang perlu looping untuk mengambil seluruh elemen pada list satu per satu kemudian menjumlahkannya

Pada minggu ini, kelas saya juga kedatangan Prof. Joao Saraiva dari Portugal yang menjelaskan tentang pemrograman fungsional dan cara mem-parsing bahasa.

Minggu 2:

Pada minggu kedua, kelas saya belajar syntax-syntax Haskell. Namun, sayangnya saya tidak masuk sehingga mengalami kesulitan memahami materi berikutnya dan saya perlu belajar sendiri syntax Haskell yang cukup sulit dipahami bagi orang yang sudah terbiasa dengan pemrograman imperatif seperti saya.

Minggu 3:

Pada minggu ketiga, saya mulai mempelajari abstraksi pada Haskell atau bisa disebut

Polymorphic and Higher-Order Functions. Pada Haskell, kita dapat membuat fungsi yang polimorfik, alias dapat menerima parameter dengan tipe yang beragam dengan satu fungsi yang sama.

fungsi length dapat menerima parameter list yang berisi tipe apapun

Kemiripan beberapa fungsi yang sering dibuat memicu programmer untuk mengabstraksi fungsi-fungsi tersebut menjadi fungsi yang lebih umum. Sehingga fungsi turunan dari abstraksi tersebut dapat dibuat dengan lebih singkat. Contohnya adalah map yang berfungsi untuk melakukan suatu fungsi pada setiap elemen yang ada pada list. map dapat digunakan untuk membuat fungsi lain.

Fungsi tanpa abstraksi
Fungsi dengan abstraksi map

Minggu 4:

Pada minggu keempat, saya belajar lebih lanjut mengenai High-Order Function. Ada konsep yang bernama Currying dimana sebuah fungsi yang tidak diberikan nilai parameter yang lengkap akan mengembalikan sebuah fungsi yang menerima parameter sisanya. Currying dapat digunakan untuk mennyederhanakan deklarasi sebuah fungsi.

Pada Haskell, kita dapat membuat anonymous functions (fungsi tanpa nama) dengan menggunakan lambda expression.

succ x = x+1
-- equivalent as:
\x -> x+1

Haskell juga mendukung Function Composition.

(f . g) x = f (g x)
-- atau
(f . g) = \x -> f (g x)

Selain itu, saya juga belajar mengenai Streams. Dengan Streams, kita dapat mengolah dan mengakses infinite sequence menggunakan lazy evaluation. Contoh penggunaan Streams adalah perhitungan baris fibonacci.

Itulah review dari pelajaran yang saya dapatkan selama 4 minggu belajar pemrograman fungsional dengan Haskell. Masih ada beberapa minggu lagi untuk menyelesaikan mata kuliah ini. Sejauh ini saya senang dan semakin penasaran untuk menggali keunikan dan kehebatan Haskell.

Sumber slide screenshot: http://www.cs.yale.edu/homes/hudak/SOE/powerpoi.htm

--

--

Reyhan Alhafizal
Reyhan Alhafizal

Written by Reyhan Alhafizal

Computer Science Student at University of Indonesia

No responses yet