Pada Artikel kali ini kita akan membahas tentang Kotlin Functional Programming, Apa itu Kotlin Functional Programming ? Kotlin adalah sebuah Multiparadigm programming language. Artinya kotlin selain merupakan bahasa pemrograman berorientasi objek, dalam penulisan sintaksnya kotlin menggunakan gaya functional programing.
Terdapat beberapa bagian dari Kotlin Functional Programming yang akan kita bahas kali ini, antara lain :
- Anatomi Function
- Named dan Default Argument
- Vararg (Variable Argument)
- Extensions
- Nullable Receiver
- Function Type
- Lambda
- Higher-Order Function
- Lambda With Receiver
- Kotlin Standard Library
- Scope Function With Lambda Receiver
- Scope Function with Lambda Argument
- Member References
- Function Inside Function
- Fold, Drop, dan Take
- Slice, Distinct, dan Chuncked
- Recursion
Pada Artikel kali ini kita akan membahas tentang Anatomi Function sampai Nullable Receiver. Baik sebelum memasuki materi Anatomi Function, kita harus paham terlebih dahulu konsep, untuk memahaminya mari simak kode berikut ini :
fun main() {
val number = getNumberSize(10, 20, 30, 40, 50)
print(number)
}
fun getNumberSize(vararg number: Int): Int {
return number.size
}
pada kode diatas kita menggunakan function untuk mendapatkat size atau ukuran dari function getNumberSize kode tersebut akan menampilkan OutPut 5 dikarenakan ukuran dari value number yaitu 5. Itu adalah salah satu contoh mengapa kotlin termasuk ke dalam Functional Programming. Pada artikel kali ini kita akan mempelajari lebih detail lagi tentang Functional Programming, Mari kita simak artikel berikut ini agar bisa menambah wawasan kita serta menambah pengetahuan baru.
Anatomi Function
Function pada dasarnya memiliki 2 bagian Utama yaitu : Function Header dan Function Function body
Function Header adalah secara simplenya ia akan menentukan perilaku seperti apa yang akan kita lakukan didalam function. didalam function header terdapat visibility modifier, kata kunci fun, nama, daftar parameter dan nilai kembalian dari fungsi tersebut.
Function body adalah yang mana didalamnya kita akan menempatkan sebuah logika baik itu sebuah expressions atau statement. sebagai contoh ketika kita ingin menetapkan sebuah fungsi yang mengembalikan nilai makan kita wajib menambahkan sebuah baris kode yang diawali kata kunci return yang di ikutin oleh expression untuk menetapkan nilai kembalian.
jika kita tidak ingin mengembalikan nilai, maka kita tidak perlu menambahkannya seperti yang saya sebutkan diatas.
Function Header
private fun sum(valueA: int, valueB: int): int
Function Body
{
// another magic
return valueA + valueB
}
Named dan Default Argument
Named Argument adalah sebuah cara agar kita tidak perlu lagi untuk menghapalkan posisi dari sebuah parameter, Karena ketika fungsi dipanggil, Kita bisa menentukan argument dari parameter mana yang ingin dilampirkan dengan memanggil nama dari parameter tersebut. Untuk lebih jelasnya mari kita simak kode berikut ini :
fun main() {
val fullName = getFullName(firstName = “Ihsan”, middleName = “Nur”, lastName = “Akmal”)
print(fullName)
}
fun getFullName(firstName: String, middleName: String, lastName: String): String {
return “$firstName $middleName $lastName”
}
Dengan begitu kita tidak perlu lagi menghafalkan posisi dari parameter cukup hafalkan nama dari parameter tersebut.
Maka kode diatas akan menampilkan Output :
Ihsan Nur Akmal
Process finished with exit code 0
Default Argument
Default Argument adalah sebuah cara yang memungkinkan kita untuk menentukan nilai default dari sebuah parameter, ketika kita melewatkan argument untuk dilampirkan,maka nilai default lah yang akan mengisi nilai tersebut.
Mari kita simak kode berikut ini :
fun main() {
val fullName = getFullName()
print(fullName)
}
fun getFullName(firstName: String = “Ihsan”, middleName: String = “Nur”, lastName: String = “Akmal”): String {
return “$firstName $middleName $lastName”
}
Dengan begitu kita tidak perlu khawatir saat lupa melampirkan argument. Tentunya kita akan terhindar dari Error
Kode diatas akan menampilkan Output :
Ihsan Nur Akmal
Process finished with exit code 0
Vararg(Variable Argument)
Dengan kita menggunakan Vararg sebuah fungsi dapat memiliki jumlah parameter berdasarkan jumlah argumen yang kita masukan ketika fungsi tersebut dipanggil.
Untuk lebih jelasnya mari kita simak kode berikut ini :
fun main() {
val number = getNumberSize(1, 2, 3, 4, 5)
print(number)
}
fun getNumberSize(vararg number: Int): Int {
return number.size
}
Mari kita perhatikan kode diatas, Kata kunci vararg kita tempatkan sebelum number.
Jadi kita bisa mengisi beberapa argumen yang tipe datanya yaitu int, oleh karena itu kita dapat menyederhanakan kodenya seperti diatas.
Kode diatas akan menampilkan Output :
5
Process finished with exit code 0
Karena kita menggunakan fungsi number.size yang mana size itu akan menghitung ada berapa value yg kita input.
Extentions
Extentions Function ini digunakan untuk menambahkan suatu fungsi pada class tanpa harus mewarisi/extend dari class asal. untuk lebih jelasnya perhatikan contoh berikut ini.
misal class String mau ditambahkan extension function toTitleCase. perhatikan susunannya yaitu [class].[nama extension] dan seperti function bisa terdapat parameter dan bertipe return atau tidak.
sekarang extension function sudah siap digunakan. caranya yaitu langsung panggil saja dibelakang suatu String. akan muncul extension function yang telah dibuat tadi.
jika script diatas dijalankan maka hasilnya akan seperti berikut ini.
terlihat kan perbedaannya, yaitu susunan stringnya sudah huruf besar dan kecil dibandingkan dengan inputan dari variabel.
Lanjut, sekarang menambahkan parameter pada extension function. perhatikan gambar berikut.
cara menggunakannya juga sama, yaitu tinggal panggil saja dibelakang String tapi kali ini memakai parameter.
sekarang jika dijalankan maka hasilnya akan seperti berikut.
Nullable Receiver
Kita bisa mendeklarasikan sebuah Extension pada nullable receiver type. Mudahnya kita dapat menggunakan null pada sebuah Extension. Lalu kapan kita membutuhkannya ? Jika kita memiliki sebuah objek yang bernilai null. Saat kita tidak menetapkannya dengan Nullable Receiver Type, maka kita perlu memeriksa apakah objek tersebut bernilai null bernilai null atau tidak. Bisa juga dengan menggunakan operator safe call setiap kali extension tersebut terpanggil. Untuk lebih jelasnya mari kita simak kode berikut ini :
fun main() {
val nilai: Int? = null
println(nilai.slice)
val nilai2: Int? = null
val nilai1: Int? = null
println(nilai2.slice1)
println(nilai1.slice1)
}
val Int?.slice: Int
get() = if (this == null) 0 else this.div(2)
val Int?.slice1: Int
get() = this?.div(2) ?: 0
Kita juga bisa menentukan nilai dari receiver object jika bernilai null. sehingga kita tidak perlu lagi menggunakan operator safe call ketika ingin menggunakan extension tersebut. Kode diatas sudah kita terapkan receiver object pada bagian :
val Int?.slice1: Int
get() = this?.div(2) ?: 0
Sekaian untuk pembahasan artikel kali ini, untuk artikel kedepannya kita akan membahas tentang : Lambda,Higher-Order Function,Lambda With Receiver ,Kotlin Standard Library,Scope Function With Lambda Receiver,Scope Function with Lambda Argument,Member References,Function Inside Function,Fold, Drop, dan Take,Slice, Distinct, dan Chuncked ,Recursion. Oleh karena itu jangan sampai ketinggalan artikel artikel terbaru dari Idn Blog. Sampai jumpa lagi.
Tertarik mengikuti training di IDN.ID ? Kami menyediakan berbagai pilihan training cek disini.
Penulis : Iksan Nur Akmal