Operator dan Ekspresi

Operator aritmetika, perbandingan, serta range dengan notasi dua titik.

Daftar isi

Operator menyusun operand menjadi ekspresi, dan setiap ekspresi menghasilkan satu nilai yang dapat dicetak maupun disimpan. Topik ini membahas operator aritmetika, operator perbandingan, serta range dengan notasi dua titik yang sering menyertai keduanya. Setiap contoh dijalankan nyata agar perilaku keluarannya dapat diamati langsung.

Operator aritmetika#

Lima operator aritmetika utama adalah penjumlahan +, pengurangan -, perkalian *, pembagian /, dan sisa pembagian %. Buat berkas aritmetika.kt berikut dengan operand bertipe Int.

kotlin aritmetika.kt
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}")
}
bash
# kompilasi aritmetika.kt dengan pustaka standar tersemat
kotlinc aritmetika.kt -include-runtime -d aritmetika.jar
# jalankan program
java -jar aritmetika.jar
text Keluaran
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1

Baris a / b menghasilkan 3, bukan 3,33, karena pembagian dua Int menghasilkan Int dan bagian pecahannya dihilangkan. Sisa pembagian 10 % 3 bernilai 1 dan sering dipakai untuk menguji keterbagian, misalnya memeriksa apakah suatu bilangan genap. Tipe operand menentukan operasi yang dijalankan, sehingga pembagian dengan operand Double berperilaku berbeda.

Operator + bekerja bukan hanya untuk angka, karena pada dua string operator yang sama menyambung keduanya menjadi satu. Inilah yang dipakai pada bagian Operator perbandingan untuk membentuk "kotlin" dari dua potong teks. Sementara itu, tanda minus yang diletakkan di depan satu angka membalik tandanya, sehingga -a menghasilkan negatif dari nilai a.

Buat berkas pembagian.kt berikut yang operandnya bertipe Double.

kotlin pembagian.kt
fun main() {
    val a = 10.0
    val b = 3.0
    println("a / b = ${a / b}")
}
bash
# kompilasi pembagian.kt dengan pustaka standar tersemat
kotlinc pembagian.kt -include-runtime -d pembagian.jar
# jalankan program
java -jar pembagian.jar
text Keluaran
a / b = 3.3333333333333335

Dengan operand Double, pembagian menghasilkan pecahan lengkap sejauh ketelitian Double memungkinkan, dan digit terakhirnya menunjukkan pembulatan biner yang wajar bagi tipe ini. Pola keduanya menegaskan aturan yang sama, yaitu tipe hasil mengikuti tipe operand, bukan nilai matematisnya.

Urutan pengerjaan operator#

Ketika beberapa operator berada dalam satu ekspresi, urutan pengerjaannya mengikuti kesepakatan matematika, yaitu perkalian dan pembagian dikerjakan lebih dahulu daripada penjumlahan dan pengurangan. Kurung mengubah urutan tersebut dan selalu dikerjakan paling dahulu. Buat berkas urutan.kt berikut.

kotlin urutan.kt
fun main() {
    println(2 + 3 * 4)
    println((2 + 3) * 4)
}
bash
# kompilasi urutan.kt dengan pustaka standar tersemat
kotlinc urutan.kt -include-runtime -d urutan.jar
# jalankan program
java -jar urutan.jar
text Keluaran
14
20

Ekspresi 2 + 3 * 4 menghasilkan 14 karena perkalian 3 * 4 dikerjakan terlebih dahulu, sedangkan (2 + 3) * 4 menghasilkan 20 karena kurung memaksakan penjumlahan lebih dahulu. Ketika ekspresi mulai memuat lebih dari dua operator, kurung yang ditulis meskipun tidak diwajibkan membuat maksudnya terbaca tanpa perlu mengingat tabel urutan. Kebiasaan ini juga menghindarkan perbedaan pendapat antara penulis dan pembaca kode.

Operator perbandingan#

Operator perbandingan menguji hubungan dua nilai dan selalu menghasilkan Boolean. Enam operatornya adalah kesamaan ==, ketidaksamaan !=, kurang dari <, lebih dari >, kurang dari sama dengan <=, dan lebih dari sama dengan >=. Buat berkas perbandingan.kt berikut.

kotlin perbandingan.kt
fun main() {
    val nilai = 82
    println(nilai == 80)
    println(nilai >= 75)
    println(nilai != 82)
    println("kotlin" == "kot" + "lin")
}
bash
# kompilasi perbandingan.kt dengan pustaka standar tersemat
kotlinc perbandingan.kt -include-runtime -d perbandingan.jar
# jalankan program
java -jar perbandingan.jar
text Keluaran
false
true
false
true

Nilai 82 tidak sama dengan 80 sehingga menghasilkan false, sedangkan 82 >= 75 menghasilkan true. Baris terakhir menunjukkan bahwa == membandingkan isi string, sehingga "kot" + "lin" yang hasilnya "kotlin" dianggap sama dengan "kotlin".

Range dengan notasi dua titik#

Range menyatakan rentang nilai dengan batas awal, tanda dua titik .., dan batas akhir. Kedua batasnya ikut termasuk, sehingga 10..24 berisi semua bilangan bulat dari 10 sampai 24. Buat berkas rentang.kt berikut.

kotlin rentang.kt
fun main() {
    val rentang = 10..24
    println(15 in rentang)
    println(30 in rentang)
    println(rentang.first)
    println(rentang.last)
}
bash
# kompilasi rentang.kt dengan pustaka standar tersemat
kotlinc rentang.kt -include-runtime -d rentang.jar
# jalankan program
java -jar rentang.jar
text Keluaran
true
false
10
24

Operator in menguji keanggotaan pada range dan menghasilkan Boolean, sehingga 15 in rentang bernilai true dan 30 in rentang bernilai false. Properti first dan last membaca kedua batasnya. Range arah sebaliknya dan dengan jarak tertentu tersedia melalui downTo dan step, yang keduanya banyak dipakai bersama perulangan.

Range yang dibentuk dari dua bilangan bulat bertipe IntRange, dan rentangnya ikut tersimpan sebagai nilai layaknya ekspresi lain. Inilah alasan rentang dapat dideklarasikan dengan val lalu diuji berkali-kali tanpa membentuk rentangnya ulang. Keanggotaan yang diuji in juga bekerja dua arah, yaitu batas awal dan batas akhir keduanya termasuk bagian rentang.

Ekspresi dan nilai hasil#

Seluruh contoh pada topik ini dibangun dari pola yang sama, yaitu operator memproses operand lalu menghasilkan nilai. Ekspresi a + b menghasilkan 13, ekspresi nilai >= 75 menghasilkan true, dan ekspresi 10..24 menghasilkan sebuah range. Nilai tersebut dapat langsung dicetak, disimpan dengan val, atau dipakai sebagai operand ekspresi lain.

Ekspresi juga boleh bersarang, dan string template memperlihatkannya dengan jelas karena isi ${...} adalah ekspresi utuh di dalam string. Hasil akhirnya selalu bertipe, sehingga Int + Int menghasilkan Int, Double / Double menghasilkan Double, dan setiap perbandingan menghasilkan Boolean. Membaca kode sebagai rangkaian ekspresi memudahkan pemeriksaan tipe, karena tipe setiap bagian dapat diikuti dari operandnya sampai hasil akhirnya.

Kebiasaan yang baik adalah memberi nama pada ekspresi yang dipakai lebih dari satu kali, misalnya menyimpan hasil harga * jumlah ke dalam val total sebelum dicetak. Nama yang tepat mendokumentasikan maksud ekspresinya, sedangkan ekspresi yang sama ditulis ulang di banyak tempat mudah saling berbeda ketika salah satunya diubah. Dengan begitu, operator tetap menjadi alat komputasinya, dan val menjadi tempat maksudnya disimpan.

Ringkasan#

  • Lima operator aritmetika utama bekerja sesuai tipe operandnya, sehingga pembagian dua Int menghasilkan Int tanpa bagian pecahan.
  • Operator perbandingan menghasilkan Boolean, dan == membandingkan isi string secara struktural.
  • Notasi 10..24 membentuk range yang kedua batasnya termasuk, dan operator in menguji keanggotaannya.
  • Ekspresi menghasilkan nilai yang dapat dicetak, disimpan dengan val, atau disarangkan di dalam ekspresi lain.

Referensi#