-
[Kotlin] Scope Function : apply, run, with, also, let μ 리Kotlin 2023. 5. 28. 23:53λ°μν
π Scope function λ?
μ 곡λ λλ€ μμ΄ μλ κ°μ²΄μμ μ΄λ¬ν ν¨μλ₯Ό νΈμΆνλ©΄ μμ λ²μκ° νμ± λλλ°, μ΄ λ²μ λ΄μμλ μ΄λ¦ μμ΄ κ°μ²΄μ μ κ·Όν μ μμ΅λλ€.
μ¦ νΉμ λ²μ {} μμμ νΉμ κ°μ²΄λ₯Ό this λ it μ ν΅ν΄ μ κ·Ό λ° μ‘°μμ΄ κ°λ₯ν ν¨μμ λλ€.
scope functionμ μ½λλ₯Ό λ κ°κ²°νκ³ μ½κ³ μ½κ² λ§λ€ μ μμ΅λλ€.
scope function μ λκ°μ§ κ΅¬μ± μμλ‘ μ΄λ£¨μ΄μ Έ μλλ° μμ κ°μ²΄(receiver) μ μμ κ°μ²΄ μ§μ λλ€ μ λλ€.
μ¬κΈ°μ μμ κ°μ²΄λ νμ₯ ν¨μκ° νΈμΆλλ λμμ΄ λλ κ°μ²΄ μ λλ€.
μμ κ°μ²΄ μ§μ λλ€λ λλ¨Έμ§ κ΅¬μ±μμμΈ block λΆλΆ μ λλ€.
μ΄λ¬ν ν¨μλ μ΄ 5κ°μ§λ‘ apply, run, with, also, let κ° μμ΅λλ€.
apply, run, with, also, let λ λ§€μ° λΉμ·ν μμ μ μνν©λλ€.
ν¨μ κ°μ²΄ μ°Έμ‘° return κ° apply this κ°μ²΄ μ체 run this λλ€ κ²°κ³Ό with this λλ€ κ²°κ³Ό also it κ°μ²΄ μ체 let it λλ€ κ²°κ³Ό μλλ λͺ©μ μ λ°λ₯Έ μ¬μ©μ μν κ°λ¨ν Guide!
1. null μ΄ μλ κ°μ²΄μμ λλ€ μ€νν λ : let
2. λ‘컬 λ²μμμ λ³μλ‘ ννμ νμν λ : let
3. κ°μ²΄ ꡬμ±ν λ : apply
4. κ°μ²΄ ꡬμ±νκ³ λ° κ²°κ³Ό κ³μ°ν λ : run
5. ννμμ΄ νμν μ€ν λ¬Έ : λΉνμ₯ run
6. μΆκ°ν¨κ³Ό : also
7. κ°μ²΄μ λν ν¨μ νΈμΆ κ·Έλ£Ήν : with
πͺ 1. apply : κ°μ²΄ ꡬμ±ν λ
inline fun <T> T.apply(block: T.() -> Unit): T
context object - receiver(this) λ‘ μ¬μ©ν μ μλ€. ( T.() λ νλΌλ―Έν°κ° μμ΄μ this λ§ μ λ¬ )
return - κ°μ²΄ μ체
μμ)
// apply λ₯Ό μ¬μ©νμ§ μμ λ val person = Person() person.name = "yura" person.job = "developer" // apply μ μ© val person = Person().apply{ name = "yura" job = "developler" }
πͺ 2. run : κ°μ²΄ ꡬμ±νκ³ λ° κ²°κ³Ό κ³μ°ν λ
inline fun <T, R> T.run(block: T.() -> R): R
context object - recevier(this) λ‘ μ¬μ©ν μ μλ€. ( T.() λ νλΌλ―Έν°κ° μμ΄μ this λ§ μ λ¬ )
return - λλ€ κ²°κ³Ό κ°
val person = Person("yura", "developer", 25) // run μ μ© val nextAge = person.run{ age++ } println(nextAge) //26
πͺ 3. with : null μ΄ λ μ μλ(non-null) μμ κ°μ²΄μ΄κ³ κ²°κ³Όκ° νμνμ§ μλ κ²½μ°μ μ¬μ©νλ€.
inline fun <T, R> with(receiver: T, block: T.() -> R): R
context object - recevier(this) λ‘ μ¬μ©ν μ μλ€. ( T.() λ νλΌλ―Έν°κ° μμ΄μ this λ§ μ λ¬ )
return - λλ€ κ²°κ³Ό κ°
val person = Person("yura", "developer") // with λ₯Ό μ¬μ©νμ§ μμ λ println(person.name) println(person.job) // with μ μ© with(person) { println(name) println(job) }
πͺ 4. also : μμ κ°μ²΄μ μμ±μ λ° κΈ°λ₯μ μ¬μ©νμ§ μκ³ μ°Έμ‘°κ° νμν μμ μ μ¬μ©
inline fun <T> T.also(block: (T) -> Unit): T
context object - μΈμ ( it )
return - κ°μ²΄ κ·Έμ체
val person = Person("yura", "developer") val info = person.also{ println(it.name) }
πͺ 5. let : λ‘컬 λ²μμμ λ³μλ‘ ννμμ΄ νμν λ or null μ΄ μλ λ μ½λλ₯Ό μ€νν΄μΌν κ²½μ°(?.)
inline fun <T, R> T.let(block: (T) -> R): R
context object - μΈμ ( it )
return - λλ€ κ²°κ³Όκ°
val person: Person? = Person("yura", "developer") val result = person?.let{ "{$name is $job}" } println(result) //yura is developer
https://kotlinlang.org/docs/scope-functions.html#functions
λ°μν'Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] Generic μ λ€λ¦μ΄λ?, variance : in, out (0) 2023.06.08