Scope Functions di Kotlin
Published: 2020-11-11 03:53:40

---
title: Scope Functions di Kotlin
published: true
description: Mengenal Scope Function di Kotlin
tags: 
cover_image: https://1.bp.blogspot.com/-0HS-g4YShyc/XbHpxovRpCI/AAAAAAAABok/vDl1TrThS4cFeC8v1CGGK4g9Mh7Az4a1gCLcBGAsYHQ/s1600/kotlin_for_android_developer_logo_051217095854.png
---
Mungkin beberapa orang ada yang masih bingung dengan perbedaan standart function yang terdapat di kotlin dan bingung untuk menentukan yang mana yang tepat untuk digunakan.
Disini saya akan menjelaskan perbedaan penggunaan antara standart function dan cara menentukan function yang tepat untuk digunakan.

## **Scope Function**<br>
Apa itu Scope Function ? Di kotlin Scope function adalah sebuah standard library yang berisikan beberapa function yang bisa digunakan untuk mengeksekusi object dengan mudah memanfaatkan [lambda expression](https://www.baeldung.com/kotlin-lambda-expressions). di blog ini akan kita bahas mengenai T.let, T.run, T.apply, T.also

## **let**<br>
let merupakan sebuah Scope Function yang menjadikan *Object* sebagai Parameter lambdanya. Sehingga perlu menggunakan *it* untuk mengakses *refrence* terhadap *object* tersebut. <br>
Contoh Penggunaan :
```kotlin
data class Student(
        val name : String,
        val major : String,

)

fun main() {

    val student = Student(name = "adit" ,major = "informatics")

    /**
     * Penggunaan let
    */
    student.let { it ->
        val text = "Nama saya ${it.name}, Jurusan saya ${it.major }"
        println(text) 
    }

/*
   output : Nama saya adit, Jurusan saya teknik informatics
*/

}
```


## **run** <br>

Fungsi run akan mengembalikan nilai berdasarkan expression yang berada di dalam blok lambda. Untuk mengakses konteks dari objek, ia akan menggunakan receiver (this). Fungsi run akan sangat berguna jika di dalam blok lambda terdapat inisialisasi objek dan perhitungan untuk nilai kembalian. <br>
Contoh Penggunaan :
```kotlin
   val name = "Aditiya"

    val result = name.run {
        val from = this
        val to = this.replace(oldValue = "Aditiya", newValue = "Ihzar")
        "Replace text from $from to $to"
    }
    println(result)


    /*
       Output : Replace text from Aditiya to Ihzar
   */
```

## **apply** <br>

Pengertian *Apply* hampir sama dengan *run*, Yang membedakan adalah *return value* dari *apply* merupakan *refrence* object itu sendiri<br>

Contoh penggunaan : 
```kotlin
data class Student(
        var nim : Int?,
        var name : String?,
        var major : String?,
        var address : String?
)

fun main() {

    val student : Student? = null

    /**
     * Contoh penggunaan apply
     */
    student?.apply {
        nim = 1811500584
        name = "Aditiya Prayogo"
        major = "teknik Informatika"
        address = "Jln komp ddn nomor 50"
    }

}
```

Contoh lain Penggunaan apply : 
```kotlin
fun main() {
    val message = StringBuilder().apply {this : StringBuilder
        append("Aditiya ")
        append("Prayogo!")
    }
 
    println(message.toString())
}
 
/*
   output : Aditiya Prayogo
*/
```

## **also**<br>

Fungsi also sama seperti fungsi apply, di mana nilai yang dikembalikan adalah nilai dari konteks objek. Namun untuk konteks objeknya tersedia sebagai argumen (it). Fungsi also baiknya digunakan ketika kita ingin menggunakan konteks dari objek sebagai argumen tanpa harus mengubah nilainya. <br>

Contoh penggunaan :
```kotlin
fun main() {
    val text = "Hello Aditiya"

    println(text)

    val result = text.also {
        println("value length -> ${it.length}")
    }
}
 
/*
   output :
           Hello Aditiya
           value length -> 13
*/
```
<br>
## **Kapan kita menggunakan let, run, apply, dan also ?**<br>
Simak Flowchart di bawah ini
![Gambar](https://miro.medium.com/max/700/1*oEQ4sqvtDfmL93wlQ0xlbQ.png)
<br>
## **Refrensi** <br>
1. https://medium.com/mobile-app-development-publication/mastering-kotlin-standard-functions-run-with-let-also-and-apply-9cd334b0ef84

2. https://proandroiddev.com/kotlin-scope-functions-made-simple-c59b97a04ca2