Skip to main content

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.

Function Biasa​

val name = "Ucup".to("UP")

Infix Notation​

val name = "Ucup" to "UP"

Hasil keduanya sama:

UCUP

Infix notation membuat kode terlihat lebih natural untuk operasi tertentu.

Contoh Infix Function Sederhana​

Kita dapat membuat Extension Function sederhana untuk menggabungkan dua String.

infix fun String.join(other: String): String {
return "$this $other"
}

Penggunaan dengan function biasa:

val result = "Hello".join("Ucup")

println(result)

Output:

Hello Ucup

Penggunaan dengan infix notation:

val result = "Hello" join "Ucup"

println(result)

Output:

Hello Ucup

Contoh Infix Function pada Int​

Infix Function juga dapat dibuat untuk tipe data Int.

Contoh:

infix fun Int.times(value: Int): Int {
return this * value
}

Penggunaan:

val result = 10 times 5

println(result)

Output:

50

Tanpa infix notation:

val result = 10.times(5)

println(result)

Kedua cara tersebut menghasilkan nilai yang sama.

Kapan Menggunakan Infix Function?​

Infix Function cocok digunakan ketika sebuah operasi memiliki hubungan yang jelas antara dua nilai.

Contohnya:

10 times 5

atau:

"Hello" join "Ucup"

Infix notation dapat membuat kode terlihat lebih natural dan mudah dibaca.

Namun, tidak semua function harus dibuat menjadi infix.

Jika penggunaan infix membuat kode menjadi sulit dipahami, lebih baik menggunakan pemanggilan function biasa:

object.function(parameter)

Contoh Program Lengkap​

Berikut 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

Function tersebut juga dapat dipanggil menggunakan cara biasa:

val name = "Ucup".to("UP")

println(name)

Hasilnya tetap:

UCUP

Kesimpulan​

Infix Notation adalah cara khusus untuk memanggil function dengan menempatkan function di antara receiver dan parameter.

Contoh:

"Ucup" to "UP"

Sama dengan:

"Ucup".to("UP")

Untuk membuat function infix, gunakan keyword:

infix

Contoh:

infix fun String.to(value: String): String {
return if (value == "UP") {
uppercase(java.util.Locale.getDefault())
} else {
lowercase(java.util.Locale.getDefault())
}
}

Beberapa aturan utama:

  • Function harus menggunakan keyword infix.
  • Harus berupa member function atau extension function.
  • Harus memiliki tepat satu parameter.
  • Parameter tidak boleh menggunakan vararg.
  • Parameter tidak boleh memiliki default value.

Dengan Infix Notation, pemanggilan function tertentu dapat ditulis dengan lebih natural:

val name = "Ucup" to "UP"

daripada:

val name = "Ucup".to("UP")