Belajar Bahasa Pemrograman Kotlin mudah

Belajar array, list, set, map pada Kotlin (data collection) [part5]

Collection and Iteration

Seperti kebanyakan bahasa pemrograman kotlin mendukung “collection data types” atau kita bilangnya “Struktur data” seperti array, list, maps, tipe data tersebut dapat mengelompokkan value dan menggunakannya di kemudian waktu untuk itu kita mulai dengan penggunaan array pada kotlin terlebih dahulu.

Array

fun main(){
    val hobiSaya = arrayOf("Sepak bola","basket","Musik","Game")
    println(hobiSaya.size)
    println(hobiSaya[0])
}

//outputnya
>> 4
>> Sepak bola

-> Array selalu dimulai dari angka index dari 0 (nol).
-> nama_array.size= untuk mengetahui ada berapa jumlah data pada array.
-> nama_array.[….] = untuk memanggil data di dalam array sesuai dengan nomor index yang di input.

Coding di atas dapat menampilkan data sesuai nomor indeks yang di isi atau secara individu, nah jika kita ingin menampilkan semua data dalam indeks array bagaimana ?, kita bisa gunakan perulangan “for” atau “for each”.

fun main(){
    val hobiSaya = arrayOf("Sepak bola","basket","Musik","Game")
    for(i in hobiSaya){
        println(i)
    }
}

ATAU

fun main(){
    val hobiSaya = arrayOf("Sepak bola","basket","Musik","Game")
    hobiSaya.forEach {
        println(it)
    }
}

//kedua coding diatas menghasilkan output :
>> Sepak bola
>> basket
>> Musik
>> Game

Biasanya jika pada kasus penggunaan array dan collection yang digunakan adalah “foreach“, dimana foreach akan melakukan perulangan atau iterasi setiap elemen yang ada di dalam array.

Tapi tidak menutup kemungkinan “for” juga digunakan disaat tertentu.

Kemudian jika di suatu kasus kita ingin mengetahui nomer/key index dari elemen array yang ditampilkan bisa menggunakan forEachIndexed, seperti berikut :

fun main(){
    val hobiSaya = arrayOf("Sepak bola","basket","Musik","Game")
    hobiSaya.forEachIndexed { index, s ->
        println("Kegiatan $s berada di nomer index $index")
    }
}

//output :
>> Kegiatan Sepak bola berada di nomer index 0
>> Kegiatan basket berada di nomer index 1
>> Kegiatan Musik berada di nomer index 2
>> Kegiatan Game berada di nomer index 3

Parameter default saat membuat foreachindex biasanya “index” dan “s” untuk parameter yang kedua kalian bisa menggantinya dengan nama lainnya(bebas) agar lebih mudah dipahami.

hobiSaya.forEachIndexed { index, ganti_sesuai_keinginan ->
println()
}

Collection

List

fun main(){
    val hobiSaya = listOf("Sepak bola","basket","Musik","Game")

    println(hobiSaya[1]) // untuk mengakses individu pada elemen
    println()
    hobiSaya.forEach {
        println(it)
    }
    println()
    println("Elemen terakhir adalah \"${hobiSaya[hobiSaya.size - 1]}\" ")
}

//output :
>> basket
>>
>> Sepak bola
>> basket
>> Musik
>> Game
>>
>> Elemen terakhir adalah “Game”

List menyimpan elemen dalam urutan tertentu dan menyediakan akses ke elemen tersebut. Indeks biasanya dimulai dari indeks elemen pertama [0] – hingga indeks yang terakhir list.size-1 (jumlah indeks yang ada di dalam list lalu dikurang 1 didapatlah no indeks terakhir pada list). dan Elemen pada list diperbolehkan adanya duplikasi termasuk null.

Set

Set sama seperti List tapi bedanya isi elemen atau valuenya tidak diperbolehkan adanya duplikasi alias tidak boleh ada yang sama.

fun main() {
    val hewan = setOf("ayam", "kambing","kucing", "sapi","sapi","sapi","ayam")

    println("Total semua elemen ada : ${hewan.size}")
    println()

    println("Elemen terakhir adalah ${hewan.last()}")
    println()

    hewan.forEachIndexed { index, s ->
        println("$s -> indeksnya $index")
    }

    println()
    println(hewan.elementAt(1))
}

//Outputnya :
>> Total semua elemen ada : 4
>>
>> Elemen terakhir adalah sapi
>>
>> ayam -> indeksnya 0
>> kambing -> indeksnya 1
>> kucing -> indeksnya 2
>> sapi -> indeksnya 3
>>
>> kambing

Coding di atas jika kalian perhatikan pada pendeklarasian variabel kita memuat 7 buah value, tapi saat dijalankan hanya terbaca 4 saja. Itu karena set tidak boleh ada yang sama maka dari itu hanya 4 value/elemen yang terbaca.

Map

Kemudian ada “Map” yang masih sama dalam segi fungsi tapi punya perbedaan di key index nya bebas di isi sesuai keperluan.

Kalau kalian ingat key index pada array selalu dari 0,1,2… dst kan ?, nah kalau di map kita bebas menamai key index tersebut, contohnya :

fun main() {
    val barang = mapOf("P01" to "Pensil", 2 to "Pulpen", "B01" to "Buku", "S01" to null)

    barang.forEach { i, s ->
        println("$s, No Barang : $i")
    }
}

>> Pensil, No Barang : P01
>> Pulpen, No Barang : 2
>> Buku, No Barang : B01
>> null, No Barang : S01

Silahkan ubah nama parameter jika ingin lebih mudah dilihat
barang.forEach { kunciku, valueku ->
println(“Ini $kunciku dan $valueku“)
}

Menambah Value pada data Collection

Dalam kotlin semua data collection secara default sifatnya immutable alias tidak dapat dirubah.

listOf, setOf, mapOf , jika menuliskan coding tersebut tidak akan ada fungsi yang bisa digunakan untuk menambah atau menghapus sebuah value yang ada di dalam data collection.

Untuk itu jika memang diperlukan operasi menambah atau menghapus value kita gunakan mutableListOf, mutableSetOf, mutableMapOf. Dengan begitu kita dapat menambahkan elemen/value baru ke dalam data collection.

fun main(){
    val hobiSaya = mutableListOf("Sepak bola","basket","Musik","Game")
    hobiSaya.add("Film") //menambahkan value baru

    hobiSaya.forEach {
        println(it)
    }
    println("Jumlah elemen : ${hobiSaya.size}")
}

>> Sepak bola
>> basket
>> Musik
>> Game
>> Film
>> Jumlah elemen : 5

Pada variabel hobiSaya awalnya hanya mendeklarasikan 4 buah value, kemudian ditambahkan 1 buah belakangan (pada baris 3).

Menggunakan Parameter Pada Collection

Sebelumnya kita sudah belajar cara bekerja menggunakan parameter pada kotlin (disini), dan kali ini kita belajar untuk mengirimkan parameter dalam bentuk data collection.

Cara pemakaian parameter data collection pada kotlin ini sama saja dengan parameter biasanya hanya saja penulisannya yang agak beda.

Dan untuk contoh di bawah kita menggunakan list, untuk set kurang lebih penggunaannya sama.

fun cetakSaya(sapaan:String ,nama:List<String>){
    println("Kata sapaan yang dikirim : $sapaan")
    println("Isi List yang dikirim : $nama")
    println()
    nama.forEach {
        println("$sapaan $it")
    }
}

fun main() {
    val orang = listOf("Ahmad", "Risa", "Rudi", "Dimas")
    cetakSaya("Halo ", orang)
}

>> Kata sapaan yang dikirim : Halo
>> Isi List yang dikirim : [Ahmad, Risa, Rudi, Dimas]
>>
>> Halo Ahmad
>> Halo Risa
>> Halo Rudi
>> Halo Dimas

Karena yang dikirimkan berupa data collection maka penulisan parameternya agak sedikit beda, lihat baris 1.

nama:List<String> = nama parameter di ikuti jenis data collectionnya ditutup dengan “<…>” yang isinya tipe data (string, integer, dll).

Kalau penggunaan pada map kurang lebih seperti berikut :

fun cetakMapParam(barang:Map<Any,String>){
    println("Isi Map yang dikirim : $barang")
    println()

    for (dataa in barang){
        println("${dataa.key} -> ${dataa.value}")
    }
}

fun main() { //fungsi main
    val barang = mapOf("P01" to "Pensil", 2 to "Pulpen", "B01" to "Buku", 34 to "Sepeda")
    cetakMapParam(barang)
}

>> Isi Map yang dikirim : {P01=Pensil, 2=Pulpen, B01=Buku, 34=Sepeda}
>>
>> P01 -> Pensil
>> 2 -> Pulpen
>> B01 -> Buku
>> 34 -> Sepeda

Kalau dilihat kenapa pada parameter barang:Map<Any,String> ditulis seperti itu ?, jika kalian perhatikan pada fungsi main kita mengirimkan key map yang berbeda, lihat :

key pensil yang bertipe StringP01“, sedangkan
key pada pulpen Integer2

Karena itulah parameternya juga ikut dikondisikan dan jika key dan value yang kalian atur menggunakan String semua maka parameternya bisa tuliskan “barang:Map<String,String>”.

=>> Sekedar tambahan, ada yang tau coding dibawah kalau dijalankan akan jadi seperti apa ?

data class Orang(var nama: String, var umur: Int)

fun cetakorg(n: Collection<Orang>){
    for (data in n){
        println("adalah ${data.umur} ${data.nama}")
    }
}


fun main() {   
    val dataOrang = listOf<Orang>(Orang("udin",22),Orang("abdi",23),Orang("oni",21))
    cetakorg(dataOrang)
}

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *