Belajar Dasar Kotlin: Kelas

Apa itu Kelas?

Kelas sangat berguna untuk menstruktur sebuah data.

Misalkan kita ingin membuat data yang merepresentasikan informasi orang berikut:

Rohmat berkelamin laki-laki dan sudah menikah.

Untuk merepresentasikan kelas tersebut kita bisa menggunakan Kelas. Bisa dikatakan Kelas merupakan struktur dari sebuah objek. Objek bisa dimisalkan sebagai data yang berada pada memori. Informasi di atas bisa kita representasikan dengan Kelas/struktur seperti berikut.

PropertiTipe DataNilai
namaStringRohmat
kelaminStringLaki
menikahBooleantrue

Kode untuk kelas di atas bisa ditulis seperti ini:

class Orang {
    var nama: String = "Rohmat"
    var kelamin: String = "Laki"
    var menikah: Boolean = true
}

class merupakan keyword yang digunakan untuk mendeklarasikan Kelas. Orang adalah nama dari kelas. nama, kelamin, menikah merupakan variabel yang berada di dalam Kelas.

Ingat: Kelas hanya memberikan struktur kepada objek/data. Untuk membuat data/objek kita harus membuatnya sendiri.

Untuk membuat objek dari kelas Orang kita bisa melakukannya seperti ini:

val orang = Orang()

Untuk mengakses variabel yang berada di dalam objek kita bisa menggunakan titik (.).

println(orang.nama) // Rohmat
println(orang.kelamin) // Laki
println(orang.menikah) // true

Anggota Kelas

Anggota kelas adalah apa pun yang berada di dalam Kelas. Mari kita lihat kelas tadi lagi:

class Orang {
    var nama: String = "Rohmat"
    var kelamin: String = "Laki"
    var menikah: Boolean = true
}

Variabel nama, kelamin dan menikah disebut juga anggota dari kelas Orang. Variabel anggota sebuah kelas juga disebut sebagai properti sebuah kelas. Anggota kelas bisa diakses dengan titik seperti tadi. Anggota kelas juga dapat berupa fungsi dan bisa diakses dengan titik. Contonhya seperti berikut:

class Orang {
    var nama: String = "Rohmat"
    var kelamin: String = "Laki"
    var menikah: Boolean = true

    fun say() {
        println("Nama: $nama, Kelamin: $kelamin, ${if (menikah) "Sudah" else "Belum"} menikah")
    }
}

val orang = Orang()
orang.say() // Nama: Rohmat, Kelamin: Laki, Sudah menikah

Anggota kelas yang berupa variabel bisa berupa val maupun var. Operasi apa pun yang bisa dilakukan kepada variabel biasa juga bisa dilakukan kepada variabel anggota kelas.

val orang = Orang()
orang.nama = "Satya"
orang.menikah = false
orang.say() // Nama: Satya, Kelamin: Laki, Belum menikah

Konstruktor

Konstruktor merupakan fungsi yang digunakan untuk membuat objek dari kelas tertentu. Kita telah banyak memanggil konstruktor pada contoh sebelumnya.

val orang = Orang()

Orang() memanggil konstruktor dari kelas Orang.

Konstruktor kelas dapat memiliki parameter dan bisa dideklarasikan seperti berikut:

class Orang(namaOrang: String, kelaminOrang: String, menikahOrang: Boolean) {
    var nama: String = namaOrang
    var kelamin: String = kelaminOrang
    var menikah: Boolean = menikahOrang

    fun say() {
        println("Nama: $nama, Kelamin: $kelamin, ${if (menikah) "Sudah" else "Belum"} menikah")
    }
}

namaOrang, kelaminOrang, dan menikahOrang merupakan parameter dari konstruktor kelas Orang. Nilai parameter konstruktor tidak bisa diakses di dalam fungsi anggota kelas, tapi bisa digunakan menjadi nilai awal variabel.

Saat kita memanggil konstruktor kelas di atas, kita harus memberi argumen untuk parameter-parameternya:

val orang = Orang("Arif", "Laki", true)
orang.say() // Nama: Arif, Kelamin: Laki, Sudah menikah

Konstruktor yang dideklarasikan setelah nama kelas disebut konstruktor utama (primary constructor). Dalam konstruktor utama, parameter bisa langsung dijadikan variabel anggota kelas dengan menambahkan var/val ke parameter.

class Orang(var nama: String, var kelamin: String, var menikah: Boolean) {

    fun say() {
        println("Nama: $nama, Kelamin: $kelamin, ${if (menikah) "Sudah" else "Belum"} menikah")
    }
}

Keyword this

Kata kunci this berisi objek saat ini dari sebuah Kelas.

class Orang(...) {
    ...

    fun say() {
        println("Nama: ${this.nama}, Kelamin: ${this.kelamin}, ${if (this.menikah) "Sudah" else "Belum"} menikah")
    }
}

val orang = Orang("Arif", "Laki", true)
orang.say() // Nama: Arif, Kelamin: Laki, Sudah menikah

Saat fungsi say dipanggil this akan berisi objek yang memanggil fungsi ini. Jadi this.nama akan sama dengan nama, this.kelamin sama dengan kelamin, dst.