Pengenalan Haskell dan Purely Functional Programming Language
Haskell adalah purely functional programming language. Dalam bahasa pemrograman imperative, segala hal diselesaikan dengan memberikan suatu urutan kode kepada komputer dan mengeksekusinya. Dengan mengeksekusi kode tersebut, anda dapat mengubah state yang memiliki side effects.
Contohnya, anda set variable x = 5
, lalu melakukan hal lain setelah itu anda set kembali variable tersebut ke value yang lain. Anda mengatur alur dari struktur untuk melakukan aksi / pekerjaan beberapa kali.
Apa itu purely functional programming language ?
Pengenalan Haskell dan Purely Functional Programming Language
Dalam purely functional programming language, anda tidak memberitahu komputer untuk melakukan suatu hal, namun mendefinisikan apakah hal itu.
Sebagai contoh,
- Faktorial dari suatu angka adalah hasil perkalian dari semua angka dari 1 sampai ke angka tersebut yang menghasilkan angka tersebut
- Jumlah dari suatu list angka adalah hasil penjumlahan dari semua angka dari list tersebut, dan lainnya.
Anda mengekspresikannya dalam bentuk suatu function. Anda tidak dapat set variable ke suatu value ke value yang lain. Jika anda mengatakan x = 5
, anda tidak mengatakan x
sebagai angka selain 5 di waktu lain, pembohong macam apa anda ini ? 😀
Dalam purely functional programming language , suatu function tidak memiliki side-effects. Satu — satunya hal yang dapat dilakukan oleh function adalah melakukan kalkulasi terhadap sesuatu dan mengembalikannya sebagai hasil.
Pada awalnya, mungkin hal ini terlihat seperti membatasi namun pada kenyataannya hal ini membawa konsekuensi yang baik. Jika suatu function digunakan lebih dari 2 kali dengan parameter
yang sama, maka function tersebut dijamin akan mengembalikan hal yang sama. Hal ini dinamakan referential transparency , purely functional programming language juga membuat anda lebih mudah untuk melakukan deduksi terhadap suatu function dan dapat memudahkan untuk membangun function yang kompleks dengan mengkombinasikan function yang simple.
Apa itu Haskell ?
Lazy Language
Haskell itu lazy language, yang artinya tanpa anda secara spesifik memberitahunya untuk bekerja, Haskell tidak akan melakukan eksekusi function dan melakukan kalkulasi sampai ia benar — benar dipaksa untuk menunjukkan hasilnya.
Hal ini sejalan dengan referential transparency and membuat anda untuk berpikir suatu program sebagai rangkaian transformasi data. Hal ini juga dapat membuat sesuatu yang cool seperti infinite data structure.
Bayangkan anda memiliki list angka yang immutable arr = [1,2,3,4,5,6,7,8,9]
dan function kaliDua
yang akan mengkalikan semua element dengan 2 dan akan mengembalikan list baru.
Dalam imperative language, jika anda ingin mengkalikannya dengan 8 anda dapat melakukan kaliDua(kaliDua(kaliDua(arr)))
, ia akan melewati semua elemen dalam list dan membuat copy lalu mengembalikannya. Lalu akan melewati list tersebut kembali 2x dan mengembalikan hasilnya.
Dalam lazy language, function kaliDua
digunakan pada suatu list tanpa memaksanya untuk menampilkan result, singkatnya bahasa ini berkata,”baiklah, saya akan melakukannya nanti“.
Namun ketika anda menginginkan result , kaliDua
pertama langsung memanggil kaliDua
yang kedua bahwa ia menginginkan result dan kaliDua
yang kedua memanggil kaliDua
yang ketiga bahwa ia juga menginginkan result juga.
Selanjutnya kaliDua
yang ketiga mengembalikan 2
, kaliDua
yang kedua mengembalikan 4
dan kaliDua
yang terakhir mengembalikan 8
.
Jadi ia hanya akan melewati semua list 1x dan hanya ketika kita membutuhkannya. Dengan cara inilah anda mendapatkan result pada lazy language, anda dapat mengambil data awal dan secara efisien mentransformasikannya menjadi bentuk yang diinginkan.
Haskell termasuk dalam statically type. Ketika anda compile program, compiler mengetahui kode mana yang merupakan number
, mana yang string
, dan seterusnya. Yang artinya kemungkinan error akan ditangkap ketika compile time. Jika anda mencoba untuk menambahkan number
dengan string
, maka compiler akan memarahimu dengan pesan error.
Haskell menggunakan sistem type yang sangat baik yang memiliki type inference. Yang artinya anda tidak perlu memberitahu Haskel secara eksplisit type dari suatu kode, karena sistem type akan mengetahuinya.
Jika anda menulis kode x = 5 + 4
, anda tidak perlu memberitahu Haskell x
adalah sebuah angka, Haskell akan mengetahuinya sendiri. Type inference juga membuat anda membuat kode lebih general. Jika function yang anda buat membutuhkan 2 parameter dan menambahkan parameter tersebut, anda tidak perlu secara eksplisit memberitahu type-nya. Function tersebut akan menganggap pada value parameter apapun sebagai angka.
Haskell itu ringkas dan elegan. Karena ia menggunakan high level concept, program haskell biasanya akan lebih pendek dibandingkan dengan kode imperative. Semakin pendek kode yang anda buat, semakin mudah untuk dimaintain dan lebih sedikit bugs.
Haskell dibuat oleh beberapa orang yang benar — benar pintar dengan gelar PhDs. Bekerja untuk membuat Haskell pada tahun 1987 ketika suatu komunitas peneliti berkumpul dan merancang suatu bahasa pemrograman baru. Pada tahun 2003, Laporan tentang Haskell dipublikasikan dan pada saat itu Haskell juga dipublikaskan bahasa pemrograman yang stabil.
Jika anda menyukai artikel ini, like, share, dan subscribe!
SQL, Lisp, and Haskell are the only programming languages that I’ve seen where one spends more time thinking than typing — Philip Greenspun
Referensi:
Originally published at nginy.net on November 19, 2017.