Pengenalan Functional Programming dengan Swift 3
Swift sebenarnya bukan bahasa yang pure functional, namun ia bisa menerapkan konsep-konsep yang ada dalam functional programming itu sendiri. Bagi yang belum tahu, functional programming adalah paradigma yang menitikberatkan pada operasi fungsi dan terbebas dari data mutation. Dalam functional programming, data / nilai yang diproses dan nantinya dikembalikan hanya dari apa yang di-passing ke dalam fungsi itu sendiri (tidak membutuhkan data dari luar fungsi). Sehingga, fungsi ini dinamakan pure function.
Sudah cukup tentang konsep dasar dari functional programming? Sekarang kita akan membahas coding nya 😁
Perbedaan pure function dengan yang tidak
Terlihat beda nya, pure function hanya mengolah nilai yang dipassing ke fungsi saja, tidak memroses nilai yang bukan dari parameter fungsinya, sedangkan impure function melakukan pemrosesan nilai dengan menyertakan nilai dari luar paramater fungsinya, dalam hal ini variabel konstant pi. Dan juga impure function bisa mengubah nilai dari variabel melalui pass by reference, yang mana hal ini menimbulkan side effect, karena dalam functional programming tidak boleh ada data mutation.
Function is a first-class object
Fungsi bisa saja dipassing di parameter fungsi atau diassignkan ke variabel. Sehingga fungsi bisa disebut sebagai first-class object. First-class object sendiri adalah entitas yang memiliki karakteristik yang sama layaknya sebuah variabel dalam bahasa pemrograman.
Higher order function
Nah, untuk yang ini, sebuah fungsi bisa dikatakan higher order function jika memenuhi satu atau semua syarat berikut:
- menerima fungsi sebagai parameter fungsi
- fungsi mengembalikan fungsi (return value berupa fungsi)
Di dunia functional programming higher order function yang sering ditemui adalah map
, filter
, danreduce
.
Ketiga fungsi tadi menerima parameter berupa closure yang mengembalikan nilai sesuai dengan kriteria yang kita inginkan. Masih bingung? Mari kita urai cara kerja filter
sesuai algoritma saya (kalau ketiganya saya contohkan, saya sudah ngantuk duluan) 😂
Begini kodingannya…
Penjelasannya:
- Fungsi
filter<T>(_:condition:)
menerima input array dan fungsi dengan tipe generik - Memanggil fungsi
filter<T>(_:condition:)
, dengan parameter pertama berupa array integer dengan elemen 1–10, lalu parametercondition
dilewatkan dengan object bertipe closure yang bisa mengembalikan tipe boolean(T) -> Bool
- Lalu, di tiap loopingnya, ia memanggil fungsi / closure
condition
dengan melewatkan satu parameterval
yang nantinya dicek kondisinya, apakah memenuhival % 2 != 0
. Jikatrue
, maka append keitems
. Setelah semua kondisi dicek, maka returnitems
.
Sehingga, jika parameter condition
di filter<T>(_:condition:)
dilewatkan fungsi apapun yang return boolean, dia akan mengembalikan array baru yang telah disaring sesuai kriteria yang telah kita tentukan 😁
Fungsi Komposisi
Dalam functional programming, kita bisa membuat suatu fungsi dengan menggabungkan lebih dari satu fungsi menjadi satu. Caranya sama dengan melakukan komposisi fungsi secara matematis (review kembali pelajaran matematika jaman SMA 😝).
Pernah menemui soal seperti ini pada waktu SMA?
Diketahui fungsi berikut…
Tentukan
Kalau tidak pernah menemui soal semacam ini, silakan kembali ke SMA 😝
Sekarang kita coba selesaikan persamaan diatas secara matematis dahulu ya, hehehe..
Oke itu tadi penyelesaian matematisnya, sekarang kita membuat codingnya 😁
Jadi penjelasan codingnya begini
- Menentukan fungsinya, yang mana closure diassignkan ke variabel
f
dang
- Menentukan custom operator
<-
yang mana nantinya akan digunakan untuk mengembalikan fungsi yang baru berdasarkan penggabunganf
dang
sesuai konsep komposisi fungsi secara matematis (lihat rumus diatas). Tipe data argumen dan return value dari closuref
dang
dan custom operator adalah tipe generikT
. - Penyelesaian rumus matematis diatas 😂
Mudah bukan, cukup sekian penjelasan singkat terkait dasar-dasar functional programming dengan Swift 3. Sudah ngantuk, nanti ada beberapa yang akan ditambahkan 😂
Dankeschön Google, Stackoverflow & Volk 😘