Pengenalan Functional Programming dengan Swift 3

Muhammad Ridho K. Pratama
Ridho's Personal Note
4 min readFeb 6, 2017

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.

map, filter, reduce explained with emoji. Gambar diambil dari sini

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:

  1. Fungsi filter<T>(_:condition:) menerima input array dan fungsi dengan tipe generik
  2. Memanggil fungsi filter<T>(_:condition:), dengan parameter pertama berupa array integer dengan elemen 1–10, lalu parameter condition dilewatkan dengan object bertipe closure yang bisa mengembalikan tipe boolean (T) -> Bool
  3. Lalu, di tiap loopingnya, ia memanggil fungsi / closure condition dengan melewatkan satu parameter valyang nantinya dicek kondisinya, apakah memenuhi val % 2 != 0 . Jika true, maka append ke items . Setelah semua kondisi dicek, maka return items .

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

  1. Menentukan fungsinya, yang mana closure diassignkan ke variabelf dan g
  2. Menentukan custom operator <- yang mana nantinya akan digunakan untuk mengembalikan fungsi yang baru berdasarkan penggabungan f dan g sesuai konsep komposisi fungsi secara matematis (lihat rumus diatas). Tipe data argumen dan return value dari closure f dan g dan custom operator adalah tipe generik T .
  3. 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 😘

--

--