Function Infix Notation
Infix Notation adalah cara penulisan function dengan menempatkan function di antara dua nilai atau object.
Infix notation sering ditemukan pada operasi matematika.
Contohnya:
10 + 20
Operator + berada di antara dua nilai:
10 + 20
│ │
data data
Kotlin juga memungkinkan kita membuat function sendiri yang dapat digunakan menggunakan infix notation.
Contoh Infix Notation
Contoh sederhana:
infix fun String.to(value: String): String {
return if (value == "UP") {
uppercase(java.util.Locale.getDefault())
} else {
lowercase(java.util.Locale.getDefault())
}
}
Function tersebut merupakan Extension Function pada String.
Keyword:
infix
menunjukkan bahwa function tersebut dapat dipanggil menggunakan infix notation.
Memanggil Function dengan Infix Notation
Function to() dapat dipanggil dengan cara:
val name = "Ucup" to "UP"
Perhatikan bahwa kita tidak menggunakan tanda titik:
"Ucup".to("UP")
Keduanya dapat digunakan dan menghasilkan hasil yang sama.
Menggunakan Infix Notation
val name = "Ucup" to "UP"
Menggunakan Pemanggilan Function Biasa
val name = "Ucup".to("UP")
Perbedaannya hanya pada cara penulisan.
Contoh Program Lengkap
infix fun String.to(value: String): String {
return if (value == "UP") {
uppercase(java.util.Locale.getDefault())
} else {
lowercase(java.util.Locale.getDefault())
}
}
fun main() {
val name = "Ucup" to "UP"
println(name)
}
Output:
UCUP
Ketika kode:
"Ucup" to "UP"
dijalankan, Kotlin akan memanggil:
"Ucup".to("UP")
Karena parameter value berisi "UP", kondisi:
value == "UP"
bernilai true.
Kemudian function menjalankan:
uppercase(java.util.Locale.getDefault())
Sehingga:
Ucup
berubah menjadi:
UCUP
Infix Notation dan Extension Function
Pada contoh sebelumnya:
infix fun String.to(value: String): String {
// ...
}
function tersebut merupakan Extension Function.
Receiver type-nya adalah:
String
Sedangkan parameter function adalah:
value: String
Sehingga kita dapat membayangkan struktur function tersebut seperti:
"Ucup" to "UP"
│ │ │
│ │ └── parameter
│ └─────── nama function
└────────────── receiver
Syarat Function Infix
Agar sebuah function dapat digunakan sebagai infix notation, terdapat beberapa aturan.
1. Harus Menggunakan Keyword infix
Contoh:
infix fun String.to(value: String): String {
return "..."
}
Keyword infix harus dituliskan sebelum fun.
2. Harus Memiliki Satu Parameter
Function infix hanya boleh memiliki satu parameter.
Contoh yang benar:
infix fun String.to(value: String): String {
return "..."
}
Contoh yang tidak dapat digunakan sebagai infix:
infix fun String.to(value1: String, value2: String): String {
return "..."
}
Karena memiliki dua parameter.
3. Parameter Tidak Boleh vararg
Parameter infix tidak boleh menggunakan vararg.
Contoh berikut tidak diperbolehkan:
infix fun String.to(vararg values: String): String {
return "..."
}
Function infix hanya boleh memiliki satu parameter biasa.
4. Parameter Tidak Boleh Memiliki Default Value
Parameter pada function infix tidak boleh memiliki nilai default.
Contoh berikut tidak diperbolehkan:
infix fun String.to(value: String = "UP"): String {
return "..."
}
Parameter harus diberikan secara langsung ketika function digunakan.
5. Harus Berupa Member Function atau Extension Function
Function infix harus berupa:
- Member Function
- Extension Function
Pada materi ini kita menggunakan Extension Function.
Contohnya:
infix fun String.to(value: String): String {
return if (value == "UP") {
uppercase(java.util.Locale.getDefault())
} else {
lowercase(java.util.Locale.getDefault())
}
}
Infix Function dengan Kondisi Berbeda
Pada contoh sebelumnya, function memeriksa nilai parameter value.
Jika:
value == "UP"
maka String diubah menjadi huruf besar.
Jika bukan "UP", String diubah menjadi huruf kecil.
Contoh:
infix fun String.to(value: String): String {
return if (value == "UP") {
uppercase(java.util.Locale.getDefault())
} else {
lowercase(java.util.Locale.getDefault())
}
}
Pemanggilan:
val result1 = "Ucup" to "UP"
val result2 = "Ucup" to "DOWN"
println(result1)
println(result2)
Output:
UCUP
ucup
Infix Notation vs Function Biasa
Perhatikan dua cara pemanggilan berikut.