Setiap bahasa pemrograman memiliki karakteristik yang membentuk cara kita berpikir saat menulis kode. Karakteristik ini bukan sekadar slogan pemasaran; sifat “ringkas” Kotlin memengaruhi berapa banyak baris yang kita ketik, sifat “aman” memengaruhi berapa banyak galat yang bisa dicegah sebelum runtime. Pada chapter ini kita akan membongkar lima ciri utama Kotlin yang dideklarasikan JetBrains sejak awal, lalu memetakan posisi Kotlin sebagai bahasa berstatik dan lintas platform.
Ringkas (Concise) #
Kotlin dirancang supaya developer menulis kode sesedikit mungkin untuk menyampaikan satu maksud. Bayangkan kita perlu merepresentasikan data pengguna dengan nama dan email. Dalam Java, class seperti ini butuh constructor, getter, equals, hashCode, dan toString — total sekitar 40 baris. Di Kotlin cukup satu baris menggunakan data class.
Konkretnya, kode berikut sudah menghasilkan implementasi equals, hashCode, toString, dan copy secara otomatis:
data class Pengguna(val nama: String, val email: String?)Karakteristik ringkas juga terlihat pada hilangnya tanda titik koma, hilangnya keyword new saat membuat instance, dan adanya type inference yang memungkinkan kompilator menyimpulkan tipe dari nilai literal.
Aman (Safe) #
Kotlin mendorong keamanan melalui dua lapisan utama: null-safety di level sistem tipe, dan smart cast pada cabang kondisional. Tipe nullable (String?) dipisahkan secara eksplisit dari tipe non-nullable (String), sehingga kompilator menolak kode yang berpotensi memunculkan NullPointerException tanpa pengecekan.
Selain itu, Kotlin meminimalkan kelas galat lain seperti ClassCastException. Setelah kita memeriksa tipe sebuah instance dengan is, kompilator otomatis mengonversi tipe tersebut ke subtype yang sesuai di dalam cabang pemeriksaan.
Pragmatis (Pragmatic) #
JetBrains membangun Kotlin sebagai bahasa yang mengutamakan kegunaan nyata, bukan kebaruan teoretis. Fitur yang ditambahkan biasanya sudah teruji di bahasa lain dan punya kasus penggunaan konkret. Sebagai contoh, scope function seperti let, run, with, apply, dan also bukan konsep baru, tetapi sangat berguna untuk merangkai pipeline transformasi data tanpa membuat variabel sementara.
Kotlin juga tidak memaksa satu paradigma. Kita bisa menulis kode object-oriented murni, fungsional penuh, atau campuran keduanya sesuai kebutuhan.
Interoperable dengan Java #
Karakteristik ini menjadi pembeda utama Kotlin dibanding banyak bahasa JVM lainnya. Kode Kotlin bisa langsung memanggil library Java, begitu pula kode Java bisa memanggil kode Kotlin tanpa wrapper tambahan. Sifat ini membuat migrasi bertahap dari Java ke Kotlin pada proyek besar menjadi layak — kita bisa mulai dengan satu file Kotlin di tengah basis kode Java yang sudah ada.
Tool-friendly #
JetBrains adalah pencipta IntelliJ IDEA, sehingga Kotlin didesain sejak awal dengan dukungan IDE yang sangat baik. Highlighting, autocomplete, refactor, dan inspeksi kode semuanya bekerja presisi karena struktur internal kompilator diekspos ke IDE melalui Binding API. Selain IntelliJ, Kotlin juga didukung Eclipse, VS Code (via extension), Android Studio, dan GitHub Actions untuk CI.
Statically Typed dan Cross-Platform #
Dua karakteristik tambahan yang perlu kita catat:
- Statically typed: semua tipe diperiksa saat kompilasi. Galat tipe terdeteksi sebelum program dijalankan.
- Lintas platform (multiplatform): kode Kotlin bisa dikompilasi ke JVM bytecode, JavaScript, native binary via LLVM, WebAssembly, dan Android. Kita akan membahas target kompilasi ini secara terperinci pada chapter Platform dan Target Kompilasi.
Mendemonstrasikan Karakteristik dalam Satu Kode #
Program berikut menunjukkan tiga karakteristik sekaligus — ringkas, aman, dan statically typed — dalam satu file:
data class Pengguna(val nama: String, val email: String?)
fun main() {
val pengguna = Pengguna("Budi", "[email protected]")
val tanpaEmail = Pengguna("Siti", null)
println(pengguna)
println(tanpaEmail)
val emailSiti = tanpaEmail.email ?: "(belum diisi)"
println("Email Siti: $emailSiti")
val panjangEmail = pengguna.email?.length
println("Panjang email Budi: $panjangEmail")
}Output yang Dihasilkan:
Pengguna(nama=Budi, [email protected])
Pengguna(nama=Siti, email=null)
Email Siti: (belum diisi)
Panjang email Budi: 16Mari kita perhatikan bagian penting kode di atas:
data class Pengguna(...): satu deklarasi menghasilkan class lengkap denganequals,hashCode,toString, dancopy.val email: String?: tanda tanya menyatakan tipe nullable. Variabel ini boleh menyimpannull.pengguna.email?.length: operator?.adalah safe call. Jikaemailbernilainull, ekspresi mengembalikannulltanpa melempar exception.?: "(belum diisi)": operator Elvis mengembalikan nilai kanan jika nilai kirinull.
Referensi Lanjutan #
- Kotlin documentation home — halaman utama dokumentasi Kotlin yang memperkenalkan karakteristik statis, null-safe, dan multiplatform
- Kotlin basic syntax — ringkasan sintaks dasar yang memperlihatkan ciri khas bahasa Kotlin
Selanjutnya #
Lima karakteristik di atas menjelaskan mengapa Kotlin terasa berbeda dari Java. Pada chapter Kotlin vs Java, kita akan membandingkan keduanya secara langsung dengan contoh kode yang setara di kedua bahasa, agar perbedaan konkritnya semakin jelas terlihat.