Operator aritmetika adalah simbol yang menjadi fondasi program kalkulasi. Di Kotlin, simbol +, -, *, /, dan % bekerja pada angka dan juga Char. Yang menarik, setiap operator sebenarnya adalah pemanggilan function dengan nama khusus seperti plus() atau times(), sehingga perilakunya dapat dikustomisasi untuk tipe buatan kita. Pada chapter ini kita akan membahas perilaku bawaan operator aritmetika pada tipe primitif, perbedaan pembagian bulat dan pembagian desimal, lalu cara kerja operator pada tipe Char.
Daftar Operator Aritmetika #
Kotlin menyediakan lima operator aritmetika standar yang berlaku untuk semua tipe angka (Byte, Short, Int, Long, Float, Double) dan Char:
| Operator | Function | Contoh | Hasil |
|---|---|---|---|
+ | plus() | 10 + 3 | 13 |
- | minus() | 10 - 3 | 7 |
* | times() | 10 * 3 | 30 |
/ | div() | 10 / 3 | 3 |
% | rem() | 10 % 3 | 1 |
Setiap operator adalah sintaks gula untuk pemanggilan function. Ekspresi a + b sebenarnya diproses oleh kompilator menjadi a.plus(b). Konvensi nama function inilah yang memungkinkan operator overloading yang akan kita bahas pada chapter terpisah.
Pembagian Bilangan Bulat vs Desimal #
Perilaku operator / bergantung pada tipe operand. Jika kedua operand bertipe bulat (Int, Long, dst.), hasil dibulatkan ke bawah menuju nol, bukan dibulatkan secara matematis. Jika salah satu operand adalah Double atau Float, Kotlin melakukan pembagian titik mengambang sehingga hasilnya menyimpan bagian pecahan.
fun main() {
val a = 10
val b = 3
println("a + b = ${a + b}")
println("a - b = ${a - b}")
println("a * b = ${a * b}")
println("a / b = ${a / b}")
println("a % b = ${a % b}")
val harga = 1500.0
val qty = 7
println("Total harga: ${harga * qty}")
val literalGanda = 10 / 3
val literalDesimal = 10.0 / 3.0
println("10 / 3 = $literalGanda")
println("10.0 / 3.0 = $literalDesimal")
val sisa = 17 % 5
println("17 % 5 = $sisa")
val huruf = 'A'
val geser = 2
println("Huruf awal: $huruf")
println("Huruf setelah ditambah $geser: ${huruf + geser}")
val jumlah = a.plus(b)
println("a.plus(b) = $jumlah")
}Output yang Dihasilkan:
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
Total harga: 10500.0
10 / 3 = 3
10.0 / 3.0 = 3.3333333333333335
17 % 5 = 2
Huruf awal: A
Huruf setelah ditambah 2: C
a.plus(b) = 13Mari kita bedah bagian-bagian kode di atas:
a / bmenghasilkan3, bukan3.33..., karena kedua operand bertipeInt. Kotlin membuang sisa pembagian secara otomatis.harga * qtymenghasilkan10500.0karenahargabertipeDouble. Perkalian antaraDoubledanIntakan mempromosikanIntmenjadiDoubleterlebih dahulu.10.0 / 3.0menghasilkan3.3333333333333335. Hasil ini mengikuti standar IEEE 754 double-precision, sehingga pembulatan terakhir mungkin tidak persis seperti yang diharapkan.huruf + gesermenghasilkan'C'. Operator+antaraChardanIntmengembalikanCharbaru yang kode Unicode-nya telah digeser sebesargeser. Inilah dasar mengubah huruf ke kode posisi alfabet.a.plus(b)membuktikan bahwa penulisan operator+benar-benar setara dengan pemanggilan functionplus().
Operator Modulo dan Sisa Pembagian #
Operator % di Kotlin mengembalikan sisa pembagian, bukan modulo matematis murni. Tanda hasil mengikuti tanda operand pertama: (-7) % 3 menghasilkan -1, bukan 2. Hal ini berbeda dengan beberapa bahasa lain yang selalu mengembalikan hasil non-negatif. Untuk modulo non-negatif, gunakan function Math.floorMod() dari standard library Java.
Char Math dan Unicode #
Tipe Char di Kotlin bukan sekadar alias angka seperti di C. Char menyimpan unit kode UTF-16 dan hanya dapat dipadankan dengan Int lewat operator + atau -. Untuk mendapatkan nilai numerik sebuah Char, gunakan property .code. Untuk mengembalikannya ke Char dari angka, gunakan Int.toChar(). Pola ini umum dipakai dalam algoritma kriptografi sederhana, seperti sandi Caesar.
val huruf = 'G'
val kode = huruf.code // 71
val kembali = kode.toChar() // 'G'Referensi Lanjutan #
- Operator overloading
— bagian arithmetic operator (
plus,minus,times) pada panduan resmi
Dengan memahami kelima operator aritmetika beserta perilaku pembagian dan operasi Char, kita siap melangkah ke operator pembanding yang akan menentukan cabang logika program pada chapter berikutnya.