Belajar Dasar Kotlin: Fungsi

Saat membuat program, kita akan memerlukan untuk menata kode berdasarkan tujuan dari kode. Kita juga mungkin ingin mengurangi kode yang diulang-ulangi. Kedua permasalahan itu bisa di selesaikan dengan fungsi. Fungsi merupakan kumpulan kode yang dideklarasikan sekali dan dapat dijalankan kapan pun.

Mendeklarasikan Fungsi

Pada Kotlin, fungsi dideklarasikan dengan keyword fun. Contohnya seperti berikut:

fun sayGreeting() {
    println("Good morning").
}

sayGreeting adalah nama fungsi. Kode dalam kurung kurawal (blok kode) merupakan kode yang akan dijalankan saat fungsi tersebut dipanggil.

Fungsi dapat di panggil seperti berikut:

sayGreeting()
// Output:
// Good morning

Parameter

Parameter merupakan variabel yang diberikan ke fungsi. Argumen adalah nilai dari sebuah parameter yang diberikan saat fungsi dipanggil. Parameter dari sebuah fungsi bisa dideklarasikan seperti berikut:

fun sayGreeting(time: String) {
    println("Good $time")
}

sayGreeting("night") // Good night
sayGreeting("afternoon") // Good afternoon
sayGreeting("morning") // Good morning

Saat mendeklarasikan parameter, tipe data parameter harus ditentukan. time merupakan nama parameter dan String merupakan tipe data parameter tersebut. "night", "afternoon" dan "morning" merupakan argument untuk parameter time.

Fungsi dapat memiliki banyak parameter, setiap parameter bisa di pisahkan dengan koma (,).

fun sayGreeting(time: String, name: String) {
    println("Good $time, My name $name")
}

sayGreeting("morning", "Asri") // Good morning, My name Asri
sayGreeting("morning", "Rizal") // Good morning, My name Rizal

Kotlin akan secara otomatis memasangkan argumen dan parameter berdasarkan kesamaan urutan. "morning" merupakan argumen dari parameter time, karena sama-sama berada pada urutan 1. "Asri" dan "Rizal" merupakan argumen dari parameter name, karena sama-sama berada pada urutan 2.

Named Arguments

Argumen dan parameter juga bisa dipasangkan berdasarkan nama yang diberikan kepada argumen saat pemanggilan fungsi.

sayGreeting(name = "Gagap", time = "night") // Good night, My name Gagap

"Gagap" digunakan sebagai argumen dari parameter name dan"night" digunakan sebagai argumen dari parameter time.

Default Arguments

Parameter pada bahasa Kotlin bisa mempunyai sebuah nilai default. Nilai default ini akan digunakan jika argumen untuk parameter tersebut tidak ditentukan.

fun sayGreeting(time: String = "morning", name: String) {
    println("Good $time, My name $name")
}

sayGreeting(name = "Apri") // Good morning, My name Apri
sayGreeting("night", name = "Siti") // Good night, My name Siti

Saat fungsi sayGreeting dipanggil tanpa ditentukan argumen untuk parameter time, maka "morning" akan digunakan sebagai argumen dari parameter tersebut.

Mengembalikan Nilai

Fungsi dapat menghasilkan/mengembalikan sebuah nilai. Agar sebuah fungsi bisa menghasilkan nilai, maka harus ditentukan tipe data nilai yang dihasilkan. Tipe data ini diletakkan setelah titik dua sebelum kurung kurawal.

fun add(left: Int, right: Int): Int {
    return left + right
}

println(add(1, 2)) // 3
println(add(3, 4)) // 7

Int merupakan tipe data dari nilai yang dihasilkan fungsi add. return digunakan untuk mengembalikan nilai. Kode setelah return harus berupa ekspresi.

return akan menghentikan fungsi dan meloncati semua kode setelahnya. return juga bisa digunakan pada fungsi yang tidak mengembalikan nilai. Dalam kasus ini, return tidak membutuhkan ekspresi.

fun sayName(name: String) {
    if (name == "")
        return

    println("My name is $name")
}

sayName("") // Tidak ada output
sayName("Rudi") // My name is Rudi

Jika tipe data nilai yang dihasilkan suatu fungsi tidak ditentukan, maka tipe data Unit secara otomatis digunakan. Tipe data Unit menyatakan bahwa fungsi tidak menghasilkan nilai apa pun. Deklarasi fungsi di atas bisa ditulis juga sebagai:

fun sayName(name: String): Unit { ... }

Single-expression Function

Jika sebuah fungsi hanya mengembalikan nilai, maka kurung kurawal bisa diganti dengan = dan nilai yang dikembalikan diletakkan setelah =.

fun add(left: Int, right: Int): Int = left + right

Fungsi dalam bentuk di atas disebut dengan Single-expression function. Saat fungsi dalam bentuk di atas maka, tipe data yang dihasilkan fungsi bisa dihilangkan dan tipe data yang dihasilkan akan ditentukan berdasarkan tipe data ekspresi setelah =.

fun add(left: Int, right: Int) = left + right

Fungsi Bersarang

Fungsi bisa berada di dalam fungsi lain. Fungsi jenis ini bisa mengakses dan mengubah variabel yang dimiliki fungsi di luarnya.

fun cekIdentitas(id: String, nama: String, password: String): Boolean {
    var benar = true
    fun cekString(str: String, field: String) {
        if (str == "") {
            println("$field kosong")
            benar = false
        } else {
            println("$field benar")
        }
    }

    cekString(id, "Id")
    cekString(nama, "Nama")
    cekString(password, "Password")
    return benar
}

println(cekIdentitas("", "", ""))
// Id kosong
// Nama kosong
// Password kosong
// false
println(cekIdentitas("ron", "", ""))
// Id benar
// Nama kosong
// Password kosong
// false
println(cekIdentitas("ron", "Ronald", ""))
// Id benar
// Nama benar
// Password kosong
// false
println(cekIdentitas("ron", "Ronald", "1234567890"))
// Id benar
// Nama benar
// Password benar
// true

Fungsi cekString hanya bisa di panggil di dalam fungsi cekIdentitas. Fungsi cekString bisa mengakses dan menggubah variabel yang dideklarasikan di dalam fungsi cekIdentitas, contohnya seperti variabel benar.