Langsung ke konten utama

Konsep Functional Programming Kotlin Bahasa Indonesia

  Functional Programming Seperti yang sudah disampaikan di awal akademi. Kotlin adalah sebuah  multiparadigm programming language.  Artinya selain merupakan bahasa pemrograman berorientasi objek, dalam penulisan sintaksnya Kotlin menggunakan gaya  functional programming . Untuk mengawalinya, perhatikan kode berikut: val list = getListUser ()   fun getUsername (): List < String >{     val name = mutableListOf < String >()     for ( user in list ){         name . add ( user . name )     }     return name } Kode di atas biasanya kita tuliskan untuk mendapatkan nilai tertentu dari sebuah list. Karena kode pada Kotlin bisa dituliskan dengan gaya fungsional, maka kode di atas cukup dituliskan seperti berikut: fun getUsername (): List < String >{     return list . map {         it . name     } } Itu adalah salah satu contoh kenapa Kotlin termasu...

Penggunaan Data Class Kotlin Bahasa Indonesia


 

Penggunaan Data Class

Sebelum kita masuk ke dalam pembahasan tentang apa saja yang bisa data class lakukan, mari kita perhatikan dulu kode berikut:

  1. class User(val name : String, val age : Int)

Kode di atas merupakan sebuah kelas yang umumnya digunakan untuk menampung sebuah data. Kelas tersebut memiliki sebuah konstruktor yang berisi beberapa properti yang bisa kita akses, baik itu create maupun read. Selanjutnya, perhatikan juga kelas berikut:

  1. data class DataUser(val name : String, val age : Int)

Kelas hampir sama dengan sebelumnya, namun memiliki keyword data yang menandakan bahwa kelas tersebut merupakan sebuah data class. Lalu, apakah perbedaan antara keduanya? Untuk mengetahuinya, bukalah Intellij IDEA dan buat sebuah berkas Kotlin dengan nama DataClasses.kt. Ketikkan kedua kelas tadi di dalamnya dan buat juga fungsi main sebagai tempat di mana kita akan mencoba mengelola atau mengoperasikan kedua kelas tersebut.

  1. class User(val name : String, val age : Int)
  2.  
  3. data class DataUser(val name : String, val age : Int)
  4.  
  5. fun main(){
  6.  
  7. }

Untuk mengetahui perbedaan yang pertama, kita akan menggunakan fungsi println() untuk menampilkan 2 buah objek yang akan dibuat dari kelas User dan DataUser. Tambahkan kode berikut di dalam fungsi main():

  1. val user = User("John Doe", 42)
  2. val dataUser = DataUser("John Doe", 42)
  3.  
  4. println(user)
  5. println(dataUser)

Jalankan fungsi main dan lihatlah hasil yang ditampilkan pada konsol:

oo.User@4d7e1886
DataUser(name=John Doe, age=42)

Bisa kita perhatikan, bahwa objek user menghasilkan teks oo.User@4d7e1886 dimana oo merupakan nama package tempat kelas User berada. User adalah nama dari kelas itu sendiri, dan @4d7e1886 adalah memory address dari kelas tersebut. Sedangkan, objek dataUser menghasilkan teks DataUser(name=John Doe, age=42), yaitu nama kelas disertai dengan semua properti di dalamnya dan value dari properti tersebut. 

Dengan begitu, Anda bisa langsung mengetahui semua informasi dari dataUser hanya dengan melihat value dari properti yang ada. Mengapa demikian? Karena seperti yang sudah disampaikan sebelumnya,  data class akan secara otomatis menghasilkan fungsi toString() di dalamnya. Tanpa data class, kita perlu membuat fungsi toString() secara manual untuk mendapatkan informasi seperti yang diberikan oleh objek dataUser. Sebagai contoh, untuk menampilkan informasi yang jelas dari objek user, maka kita perlu menambahkan fungsi toString() seperti berikut:

  1. class User(val name : String, val age : Int){
  2.  
  3.     override fun toString(): String {
  4.         return "User(name=$name, age=$age)"
  5.     }
  6. }

Dengan menambahkan fungsi toString() seperti di atas, maka objek user akan bisa menghasilkan teks yang sama dengan objek dataUser. Coba jalankan kembali fungsi main().

User(name=nrohmen, age=17)
DataUser(name=nrohmen, age=17)

Selanjutnya, kelebihan lain dari data class adalah ia sudah memiliki fungsi equals() secara otomatis. Maka jika Anda ingin melakukan komparasi antara 2 buah objek, lakukanlah dengan mudah seperti contoh di bawah ini:

  1. fun main(){
  2.     val dataUser = DataUser("Tony", 35)
  3.     val dataUser2 = DataUser("Mark", 46)
  4.     val dataUser3 = DataUser("John", 42)
  5.  
  6.     println(dataUser.equals(dataUser2))
  7.     println(dataUser.equals(dataUser3))
  8.  
  9. }

Konsol akan langsung memberi tahu apakah kedua objek tersebut sama atau tidak ketika Anda menjalankan fungsi main():

true
false

Lain halnya jika kita melakukan komparasi pada 2 buah objek yang bukan dari data class. Kita tidak bisa mendapatkan hasil yang akurat karena konsol akan selalu menghasilkan nilai false. Sebagai contoh, perhatikanlah kode berikut:

  1. fun main(){
  2.     val user = User("Tony", 35)
  3.     val user2 = User("Mark", 46)
  4.     val user3 = User("John", 42)
  5.  
  6.     println(user.equals(user2))
  7.     println(user.equals(user3))
  8. }

Maka hasilnya akan sama saja, false semua:

false
false

Dan jika Anda menginginkan hasil yang akurat seperti pada data class, maka Anda perlu membuat fungsi equals() secara manual:

  1. class User(val name : String, val age : Int){
  2.  
  3.     override fun equals(other: Any?): Boolean {
  4.         if (this === other) return true
  5.         if (javaClass != other?.javaClass) return false
  6.  
  7.         other as User
  8.  
  9.         if (name != other.name) return false
  10.         if (age != other.age) return false
  11.  
  12.         return true
  13.     }
  14.  
  15.     override fun hashCode(): Int {
  16.         var result = name.hashCode()
  17.         result = 31 * result + age
  18.         return result
  19.     }
  20. }

Anda perlu menuliskan beberapa boilerplate code di atas untuk mendapatkan hasil yang sesuai. Belum lagi ketika Anda menambahkan fungsi equals(), Anda juga perlu menambahkan fungsi hashCode().

Postingan populer dari blog ini

Collections Operations Kotlin Bahasa Indonesia

  Collections Operations Selain memiliki beberapa turunan yang baru saja kita bahas, Collection juga mempunyai beberapa fungsi operasi yang bisa kita gunakan untuk mengakses data di dalamnya. Sekarang saatnya kita akan mempelajari fungsi-fungsi yang dimaksud.  filter() dan filterNot() Mari kita mulai dari fungsi  filter()  dan  filterNot()  terlebih dahulu. Kedua fungsi tersebut akan menghasilkan list baru dari seleksi berdasarkan kondisi yang kita berikan. Sesuai dengan namanya, untuk mem- filter  atau menyaring suatu data dalam sebuah collection. Contohnya dapat Anda lihat pada kode berikut: val numberList = listOf ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) val evenList = numberList . filter { it % 2 == 0 }   // evenList: [2, 4, 6, 8, 10] Pada kode di atas, kita telah menggunakan  filter()  untuk menyaring bilangan yang habis dibagi 2 (dua) atau biasa disebut dengan bilangan genap. Selain itu kita juga dapat mem-filter ...

Rangkuman dari Pendahuluan Kotlin

  Rangkuman dari Pendahuluan Kotlin merupakan bahasa pemrograman open-source yang mudah dipelajari oleh siapapun. Ini bisa dilakukan berkat kejeniusan para developer di JetBrains yang dipimpin langsung oleh Andrey Breslav. Selain mudah dipelajari, Kotlin memungkinkan kita untuk membuat program antar platform yang tentunya ini dapat mengurangi biaya dalam pembuatan program itu sendiri.  Selain itu dalam sub-modul pendahuluan ini Anda juga telah mengetahui beberapa hal sebagai berikut: Selain mudah dipelajari, Anda juga dapat ikut berkontribusi di dalamnya karena Kotlin merupakan project  open-source . Kotlin mendukung 2 paradigma ( multiparadigm ) umum yang akan Anda sering jumpai, yaitu  Object-Oriented Programming (OOP)  dan  Functional Programming (FP) . Kedua paradigma tersebut akan sangat membantu proses pengembangan dengan masing-masing fitur yang dimilikinya. Selain multiparadigm, Kotlin juga mendukung  multiplatform  yang berbeda dengan bah...

Data Types & Variable Kotlin Bahasa Indonesia

  Data Types & Variable Data types atau tipe data adalah sebuah pengklasifikasian data berdasarkan jenis data tersebut. Untuk mengembangkan sebuah program, ada beberapa tipe data yang akan kita pelajari. Di antaranya adalah  Character ,  String ,  Array ,  Numbers  dan  Booleans . Semuanya akan kita bahas sejelas dan sesederhana mungkin di dalam sub-modul ini. Namun sebelumnya, ada satu hal yang kita perlu tahu terlebih dahulu, yaitu  Variabel . Umumnya variabel digunakan untuk menyimpan informasi atau nilai yang akan dikelola di dalam sebuah program. Sebuah variabel akan membutuhkan kata kunci  var  atau  val ,  identifier ,  type  dan  initialization . Kira-kira strukturnya seperti berikut: var identifier : Type = initialization Berikut adalah contoh variabel dengan tipe String: var company : String = "Indonesia" Mari kita ulas setiap bagian pada struktur variabel di atas. var   atau   val...