Setelah memisahkan kode ke beberapa package, kita perlu cara untuk memanggil deklarasi dari package lain. Mekanisme itu disediakan oleh statement import. Pada chapter ini kita akan membahas tiga bentuk import — tunggal, wildcard, dan alias — beserta cara menyelesaikan konflik nama ketika dua package mendefinisikan deklarasi dengan nama yang sama. Penguasaan import ini penting karena sebagian besar kode Kotlin nyata memanggil standard library dan library eksternal melalui import.
Bentuk Import di Kotlin #
Berbeda dengan Java, di Kotlin statement import tidak hanya berlaku untuk class. Kita juga mengimpor top-level function dan top-level property. Selain itu, Kotlin menyediakan fasilitas import alias sehingga kita dapat memberi nama lokal yang berbeda untuk deklarasi yang diimpor. Hal ini sangat berguna saat dua package berbeda menyediakan deklarasi dengan nama yang sama persis.
Empat bentuk import yang umum dipakai:
| Bentuk | Kegunaan |
|---|---|
import kotlin.math.sqrt | Import satu deklarasi spesifik. |
import kotlin.math.* | Import wildcard semua deklarasi publik dari package. |
import com.x.Util as U | Import dengan alias untuk memendekkan atau menghindari konflik. |
import com.x.foo (object/function) | Import function atau property top-level. |
Contoh Kode #
Kode berikut memadukan ketiga bentuk import sekaligus menunjukkan resolusi konflik antara kotlin.math.PI dan konstanta lokal PI_LOKAL:
// File: import_statements.kt
// Mendemonstrasikan import tunggal, wildcard, alias, dan resolusi konflik.
package com.example.demo
import kotlin.math.sqrt
import kotlin.math.PI
import com.example.demo.Util as U
const val PI_LOKAL: Double = 3.14
object Util {
fun sapa(nama: String): String = "Halo, $nama (dari Util lokal)"
}
fun hitungAkar(nilai: Double): Double = sqrt(nilai)
fun luasLingkaran(jariJari: Double): Double {
// Konflik antara kotlin.math.PI dan PI_LOKAL; sebut eksplisit.
return PI * jariJari * jariJari
}
fun luasLingkaranKasar(jariJari: Double): Double {
return PI_LOKAL * jariJari * jariJari
}
fun main() {
val akar = hitungAkar(144.0)
println("Akar dari 144.0 = $akar")
val luas = luasLingkaran(2.0)
println("Luas lingkaran r=2.0 (PI penuh) = $luas")
val luasKasar = luasLingkaranKasar(2.0)
println("Luas lingkaran r=2.0 (PI lokal) = $luasKasar")
// Mengakses Util melalui alias U untuk menghindari penulisan panjang.
val salam = U.sapa("Siti")
println(salam)
}Output yang Dihasilkan:
Akar dari 144.0 = 12.0
Luas lingkaran r=2.0 (PI penuh) = 12.566370614359172
Luas lingkaran r=2.0 (PI lokal) = 12.56
Halo, Siti (dari Util lokal)Mari kita amati baris-baris penting di atas:
- Baris 6 (
import kotlin.math.sqrt): mengimpor functionsqrtdari packagekotlin.math. Setelah import, kita dapat memanggilsqrt(nilai)tanpa awalan package. - Baris 7 (
import kotlin.math.PI): mengimpor konstantaPIdengan presisi penuh. KarenaPIjuga kita definisikan ulang sebagaiPI_LOKAL, kedua nama tidak saling menimpa — keduanya hidup berdampingan dalam scope yang berbeda. - Baris 8 (
import com.example.demo.Util as U): aliasUuntuk objectUtil. Panggilan menjadiU.sapa("Siti")alih-alihUtil.sapa("Siti"). Alias juga membantu saat namaUtilsudah dipakai untuk identifier lain. - Baris 13 (
object Util { ... }): deklarasi object local pada file yang sama. Karena diberi aliasU, kita dapat memanggilnya tanpa ambiguitas. - Baris 20 (
return PI * jariJari * jariJari): memakaiPIdarikotlin.math(karena import tunggal di atas). Hasilnya lebih presisi dibandingPI_LOKAL = 3.14. - Baris 28 (
val salam = U.sapa("Siti")): panggilan methodsapapadaUtilmelalui alias.
Wildcard Import dan Kapan Dipakai #
Import wildcard (import com.example.*) membawa semua deklarasi publik dari sebuah package. Praktik ini cocok untuk package kecil dengan banyak deklarasi yang sering dipakai bersama, misalnya kotlin.math.* atau kotlinx.coroutines.*. Untuk package besar dan kode produksi, import tunggal lebih disukai karena eksplisit memperjelas asal setiap simbol.
Konflik Nama #
Konflik terjadi ketika dua package berbeda menyediakan class/function dengan nama yang sama. Solusinya ada tiga: import salah satunya saja, alias untuk salah satu, atau gunakan fully qualified name secara langsung (misalnya kotlin.math.PI). Pilihan ketiga cocok bila hanya satu titik pemakaian.
Referensi Lanjutan #
- Packages
— bagian statement
importdan import rename pada panduan packages resmi
Selanjutnya #
Setelah menguasai import, pertanyaan berikutnya adalah siapa yang boleh melihat deklarasi yang kita tulis. Hal ini diatur oleh visibility modifier, topik chapter Visibility Modifiers.