Seperti yang diketahui sebelumnya, package merupakan pembungkus dari kelas (package-level class), fungsi (package-level function) atau variabel (package-level variable) berfungsi serupa. Kita juga sudah mengetahui cara mengimpor suatu kelas, fungsi atau variabel yang terdapat pada sebuah package. Namun kita belum tahu bagaimana package tersebut dibuat. Jadi pada pembahasan kali ini kita akan mencoba bagaimana untuk membuat sebuah package pada Kotlin.

Idealnya sebuah package pada Kotlin dituliskan dengan awalan nama domain perusahaan yang dibalik. Contoh, com.dicoding. Kemudian diikuti dengan nama package yang akan digunakan.

Untuk membuat sebuah package kita perlu membuat folder package pada berkas proyek. Perhatikan Project Tool Window yang terdapat pada IntelliJ Idea. Klik kanan pada folder src kemudian arahkan pada menu New > package.

Setelah itu ketikkan nama package yang akan kita buat, misalnya com.dicoding.oop.utils:

Perlu diingat, penamaan package selalu dituliskan dengan flatcase, tanpa garis bawah dan dipisahkan dengan titik.

Dengan menekan tombol “OK” maka kita berhasil membuat sebuah package folder pada proyek aplikasi kita. Maka struktur proyek akan menjadi seperti ini:

Selanjutnya, buatlah sebuah berkas di dalam package utils. Disini kita menamai berkas tersebut dengan nama MyMath.kt. Bukalah berkas tersebut dan perhatikan baris kode yang dihasilkan oleh IntelliJ Idea. Seharusnya kita melihat baris kode berikut pada berkas MyMath.kt.

1. package com.dicoding.oop.utils 2. fun sayHello() = println("Hello From package com.dicoding.oop.utils")

Kita sudah membuat sebuah fungsi sayHello() pada package-level. Untuk mengakses fungsi tersebut kita dapat menuliskan secara eksplisit alamat package. Buatlah sebuah berkas Kotlin dengan nama Main.kt pada package com.dicoding.oop kemudian akses fungsi sayHello() yang terdapat pada package com.dicoding.oop.utils

1. fun main(){ 2.     com.dicoding.oop.utils.sayHello() 3. } 4.   5. /* 6. Output: 7.     Hello From package com.dicoding.oop.utils 8. */

Atau kita dapat menggunakan fungsi tersebut dengan mengimpor package-level function tersebut.

1. package com.dicoding.oop 2.   3. import com.dicoding.oop.utils.sayHello 4.   5. fun main() { 6.     sayHello() 7. } 8.   9. /* 10. Output: 11.     Hello From package com.dicoding.oop.utils 12. */

Untuk dapat memahami tentang package lebih lanjut, mari kita buat beberapa fungsi dan variabel pada package tersebut. Buka kembali berkas MyMath.kt, tambahkan beberapa fungsi dan variabel yang akan kita gunakan nantinya.

1. package com.dicoding.oop.utils 2.   3. fun sayHello() = println("Hello From package utils") 4.   5. const val PI = 3.1415926535  // package level variable 6.   7. fun pow(number: Double, power: Double) : Double { 8.     var result = 1.0 9.     var counter = power 10.     while (counter > 0) { 11.         result *= number 12.         counter-- 13.     } 14.     return result 15. } 16.   17. fun factorial(number: Double) : Double { 18.     var result = 1.0 19.     var counter = 1.0 20.     while (counter <= number) { 21.         result *= counter 22.         counter++ 23.     } 24.   25.     return result 26. } 27.   28. fun areaOfCircle(radius: Double) : Double { 29.     return PI * 2 * radius 30. }

Panggil beberapa fungsi dan variabel yang sudah ditambahkan pada MyMath.kt.

1. package com.dicoding.oop 2.   3. import com.dicoding.oop.utils.PI 4. import com.dicoding.oop.utils.factorial 5. import com.dicoding.oop.utils.pow 6. import com.dicoding.oop.utils.sayHello 7.   8. fun main() { 9.     sayHello() 10.     println(factorial(4.0)) 11.     println(pow(3.0, 2.0)) 12.     println(PI) 13. } 14.   15. /* 16. output: 17.     Hello From package com.dicoding.oop.utils 18.     24.0 19.     9.0 20.     3.1415926535 21. */

Pada awal kode terlihat saat kita menggunakan suatu fungsi atau variabel yang berada pada package tertentu, kita perlu melakukan impor pada setiap fungsi atau variabelnya. Tetapi jika kita menggunakan seluruh fungsi atau variabel dalam package tertentu kita bisa menggunakan tanda bintang (*) untuk melakukan impor pada seluruh fungsi dan variabel di package tersebut. Perhatikan kode berikut: