Kotlin: Fungsi
Tags: beginners, programming, kotlin, android
Published: 2023-12-06 00:16:40

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v1ryq88hzfdeag2n4uyg.gif)
`Untuk membuka tautan, lebih di sarankan --> klik kanan, lalu pilih buka link di tab baru agar tidak menutup artikel ini.`
<br>
## **Fungsi**

> ###### Sebuah fungsi itu mirip dengan sebuah program yg kecil yang memiliki nama-nya sendiri, dan dapat dijalankan (dipanggil) dengan memanggil nama tersebut dari fungsi lain.

Fungsi dalam pemrograman bisa dibayangkan seperti **Alat Khusus** dalam **Kotak Peralatan**. Misalnya, bayangkan Kita memiliki **Kotak Peralatan** yang berisi berbagai Alat, dan salah satunya adalah **Alat Khusus** yang disebut **"DoSomething."** Alat ini memiliki kemampuan khusus dan dapat diaktifkan dengan **memanggil** namanya yaitu **"DoSomething."**.

Sebuah fungsi adalah kumpulan aktivitas yang digabungkan bersama, dan ini adalah cara dasar untuk mengatur program kita dan menggunakan kembali potongan kode tertentu.

Kita memberikan informasi ke dalam fungsi, kemudian fungsi menggunakan informasi tersebut untuk melakukan perhitungan dan menghasilkan output, seperti nilai atau hal lainnya. Bentuk dasar dari sebuah fungsi adalah sebagai berikut:

```kotlin
fun namaFungsi(p1: Tipe1, p2: Tipe2, ...): TipeHasil {

  baris kode

  return hasil

}
```

`p1` dan `p2` adalah istilah untuk Parameter, yang bisa dianggap seperti informasi atau data yang dimasukkan ke dalam fungsi. Setiap parameter memiliki nama identifikasi `(p1, p2)` diikuti oleh titik dua dan jenis data dari parameter tersebut. Tanda kurung tutup dari daftar parameter diikuti oleh titik dua dan jenis data hasil yang dihasilkan oleh fungsi. Baris kode dalam tubuh fungsi diapit oleh kurung kurawal. Ekspresi yang mengikuti kata kunci return adalah hasil yang dihasilkan oleh fungsi ketika selesai.

Sebuah parameter itu seperti aturan yang mengatur apa yang bisa dimasukkan ke dalam fungsi—bisa dianggap seperti **_pemain pengganti_** dalam permainan sepak bola. Sedangkan argumen adalah **_pemain aktual_** yang Anda masukkan ke dalam permainan, atau nilai sebenarnya yang Anda berikan ke dalam fungsi.

Gabungan dari **_nama_**, **_parameter_**, dan **_jenis keluaran_** dari fungsi itu disebut sebagai [function signature](https://developer.mozilla.org/en-US/docs/Glossary/Signature/Function?retiredLocale=id), mirip dengan kombinasi **nama**, **aturan**, dan **peran pemain** dalam tim sepak bola.

Berikut adalah contoh fungsi sederhana yang disebut multiplyByTwo():

```kotlin
// Functions/MultiplyByTwo.kt

fun multiplyByTwo(x: Int): Int {  // [1]

  println("Di dalam multiplyByTwo") // [2]

  return x * 2

}

fun main() {

  val r = multiplyByTwo(5)        // [3]

  println(r)

}

/* Output:

Di dalam multiplyByTwo

10

*/
```

[1] Perhatikan kata kunci **fun**, nama **fungsi**, dan **daftar parameter** yang terdiri dari **satu parameter**. Fungsi ini mengambil parameter **Int** dan mengembalikan **Int**.

[2] Dua baris ini adalah **tubuh fungsi atau tubuh blok**. Baris terakhir **mengembalikan** nilai dari perhitungan `x * 2` sebagai hasil fungsi.

[3] Baris ini memanggil fungsi dengan argumen yang sesuai, dan menangkap hasilnya ke dalam `val r`. Pemanggilan fungsi meniru bentuk deklarasinya: nama fungsi, diikuti oleh argumen di dalam tanda kurung.

Kode fungsi dijalankan dengan cara memanggil fungsi, dan kita menggunakan nama fungsi seperti **multiplyByTwo()** sebagai cara singkat untuk mengakses kode tersebut. Oleh karena itu, fungsi adalah cara paling dasar untuk membuat kode menjadi lebih sederhana dan dapat digunakan kembali dalam pemrograman. Kita juga bisa memahami fungsi sebagai sesuatu seperti **rumus matematika** yang dapat diisi dengan **nilai tertentu** (parameter).

**println()** itu sebenarnya seperti memanggil nomor hotline yang sudah disiapkan oleh Kotlin. Jadi, kita menggunakan nomor ini untuk melakukan sesuatu, dan Kotlin sudah menyiapkan nomor tersebut sebagai alat yang sudah jadi untuk kita gunakan.

Jika fungsi tidak menghasilkan informasi yang penting, jenis hasilnya disebut **Unit**. Kita bisa menetapkannya secara jelas jika perlu, tetapi Kotlin memperbolehkan untuk tidak menyertakannya:

```kotlin
// Functions/SayHello.kt

fun sayHello() {

  println("Halo!")

}

fun sayGoodbye(): Unit {

  println("Sampai jumpa!")

}

fun main() {

  sayHello()

  sayGoodbye()

}

/* Output:

Halo!

Sampai jumpa!

*/
```

Baik **sayHello()** maupun **sayGoodbye()** mengembalikan **Unit**, namun **sayHello()** tidak memerlukan deklarasi yang [eksplisit](https://kbbi.kemdikbud.go.id/entri/eksplisit). Fungsi **main()** juga menggunakan **Unit**.

Jika suatu fungsi hanya terdiri dari satu pernyataan saja, Kita bisa gunakan cara singkat dengan langsung menulis ekspresi setelah tanda sama dengan, seperti ini:

```kotlin
fun namaFungsi(arg1: Tipe1, arg2: Tipe2, ...): TipeHasil = ekspresi
```

Bagian dalam fungsi yang dikelilingi oleh kurung kurawal disebut tubuh blok. Sementara itu, jika fungsi menggunakan tanda sama dengan, itu disebut tubuh ekspresi.

Contohnya, pada fungsi multiplyByThree() di bawah ini:

```kotlin
// Functions/MultiplyByThree.kt

fun multiplyByThree(x: Int): Int = x * 3

fun main() {

  println(multiplyByThree(5))

}

/* Output:

15

*/
```

Ini adalah cara singkat untuk menggambarkan bahwa fungsi tersebut mengembalikan hasil dari perhitungan `x * 3` tanpa perlu menggunakan kurung kurawal dan kata kunci "return" secara eksplisit di dalam tubuh fungsi.

Kotlin dapat mengetahui jenis data yang dikembalikan oleh suatu fungsi yang memiliki tubuh ekspresi. Contohnya dapat dilihat pada kode berikut:

```kotlin
// Functions/MultiplyByFour.kt

fun multiplyByFour(x: Int) = x * 4

fun main() {

  val result: Int = multiplyByFour(5)

  println(result)

}

/* Output:

20

*/
```

Dari sini, Kotlin secara otomatis mengetahui bahwa fungsi **multiplyByFour()** mengembalikan nilai dengan tipe data **Int**.

Kotlin bisa otomatis menentukan tipe hasil kembali jika sebuah fungsi hanya berisi satu ekspresi. Jika fungsi memiliki tubuh yang lebih kompleks (**_tubuh blok_**) dan Kita tidak menyebutkan tipenya, maka fungsi tersebut akan mengembalikan "Unit."

Saat membuat fungsi, lebih baik pilih nama yang menjelaskan fungsinya dengan baik. Ini membuat kode menjadi lebih mudah dimengerti tanpa perlu penjelasan tambahan. Kadang-kadang, keterbatasan lebar baris membuat kita tidak bisa menggunakan nama yang sejelas yang diinginkan dalam buku ini.

[Sumber - Atomic kotlin Sample](https://stepik.org/lesson/104306/step/1?unit=88938)