Selasa, 14 Juni 2022

Belajar Import dan Packages di Kotlin


Import dan Packages

Seluruh konten pada Kotlin, seperti kelas dan fungsi, dibungkus dalam sebuah package

Package tersebut digunakan untuk mengelompokkan kelas, fungsi dan variabel yang mempunyai kemiripan fungsionalitas. 
Untuk menggunakan kelas, fungsi maupun variabel yang berada pada suatu package, kita harus menuliskan secara lengkap alamat package tersebut. Sebagai contoh kita akan menggunakan kelas Random, maka kita harus menuliskan seperti ini:

  1. val someInt = kotlin.random.Random(0).nextInt(1, 10)



Kode tersebut menunjukkan bahwa kelas Random berada pada package kotlin.random, tetapi apakah perlu menuliskan kode sepanjang itu untuk menggunakan sebuah kelas? 
Tentu tidak, untuk meminimalisir hal tersebut kita cukup mengimpor package kelas Random. Dengan begitu kita tidak perlu menuliskan kode yang panjang secara berulang.

Importing Package

Untuk mengimpor suatu package kelas, fungsi atau variabel, kita cukup menuliskan keyword import kemudian dilanjutkan dengan alamat spesifiknya seperti: 

  1. import packagename.ClassName

  2. import packagename.functionName

  3. import packagename.propertyName


Karena kelas Random berada pada package kotlin.random, maka penulisannya menjadi seperti ini:

  1. import kotlin.random.Random


Setelah kita impor kelas Random beserta alamat package-nya, kita dapat menuliskan kelas Random secara langsung tanpa menulis seluruh alamat package-nya. Tentunya hal ini akan membuat waktu dalam menuliskan kode lebih efisien.

  1. import kotlin.random.Random

  2.  

  3. val someInt = Random(0).nextInt(1, 10)


Biasanya terdapat banyak kelas, fungsi ataupun variabel dalam sebuah package. Contohnya kita akan menggunakan beberapa fungsi dan variabel matematika pada package kotlin.math seperti berikut:

  1. import kotlin.math.PI

  2. import kotlin.math.cos

  3. import kotlin.math.sqrt

  4.  

  5. fun main(){

  6.     println(PI)

  7.     println(cos(120.0))

  8.     println(sqrt(9.0))

  9. }

  10.  

  11. /*

  12. Output:

  13.     3.141592653589793

  14.     0.8141809705265618

  15.     3.0

  16. */



Kita juga dapat mengganti nama sebuah kelas, fungsi atau variabel yang kita import dengan menggunakan alias yang direpresentasikan dengan kata kunci as.

  1. import kotlin.math.PI

  2. import kotlin.math.cos as cosinus

  3. import kotlin.math.sqrt as akar

  4.  

  5. fun main(){

  6.     println(PI)

  7.     println(cosinus(120.0))

  8.     println(akar(9.0))

  9. }

  10.  

  11. /*

  12. Output:

  13.     3.141592653589793

  14.     0.8141809705265618

  15.     3.0

  16. */


Biasanya as digunakan ketika kita menggunakan sebuah kelas, fungsi, maupun variabel yang memiliki nama yang sama namun berbeda package-nya. Ini bertujuan untuk menghindari ambiguitas.

Seperti yang kita ketahui sebelumnya, pada package kotlin.math terdapat banyak fungsi dan variabel yang dapat kita gunakan. Kita bisa melihat pada completion suggestion berikut:
20220430105930df0777754ce4a43b248a8741114970a1.png
Kita dapat mengimpor seluruh kelas, fungsi dan variabel yang berada pada suatu package dengan menggunakan tanda  * pada akhir package tersebut.

  1. import kotlin.math.*

  2.  

  3. fun main(){

  4.     println(PI)

  5.     println(cos(120.0))

  6.     println(sqrt(9.0))

  7. }

  8.  

  9.  

  10. /*

  11. Output:

  12.     3.141592653589793

  13.     0.8141809705265618

  14.     3.0

  15. */


Membuat Package Baru

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.
2022043011134425ee315acb2e1317ad4eabcb273045d2.gif
Setelah itu ketikkan nama package yang akan kita buat, misalnya com.dicoding.oop.utils:
20220430111411c1817e1ac575bac69f623d4d18828cf0.png
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:
20220430111518bde5cec751db04bd37888fcd15c04e5f.png

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:

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


Dengan memanggil fungsi areaOfCircle() maka kita menggunakan seluruh fungsi dan variabel yang berada pada package com.dicoding.oop.utils, sehingga import package cukup dilakukan dengan menggunakan tanda bintang (*).

Posting Komentar