Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

끄적끄적

Scope Function(with, run, T.with, T.run, let, also, apply) 본문

Kotlin

Scope Function(with, run, T.with, T.run, let, also, apply)

kimii 2021. 9. 8. 22:39

run - 또 다른 스코프를 정의할 수 있다. 블록 안에서의 마지막 객체를 반환한다.

fun test() {
    run {
        Toast.makeText(applicationContext, "Toast Message", Toast.LENGTH_SHORT)
    }.show()
}

with vs T.run

with(view) {
    visibility = View.VISIBLE
}

view.run {
    visibility = View.VISIBLE
}

- with은 일반적인 함수이고, T.run은 확장 함수이다.

- 'view?.run { }'으로 하면 코드 수행 전에 null 체크가 가능하다.


run vs let

someString?.run {
    println("${this} not null")
}

someString?.let {
    println("${it} not null")
}

- T.run은 block : T.() 로 정의되어있어 일반적은 extension function으로 T를 호출하려면 this를 사용해야 한다.(생략 가능)

- T.let은 block: (T) 로 정의되어 있어 lambda에서 parameter를 넘기는 것처럼 블록 안으로 T를 넘겨서 it으로 받아서 사용할 수 있다.

- let은 it을 사용하기 때문에 block 내부의 function/member를 좀 더 명확하게 구분할 수 있다.

- this를 생략할 수 없어서 parameter로 넘겨야 하는 경우 this보다는 it이 좀 더 짧게 쓸 수 있다.

- let은 block 내부에서 lambda처럼 다른 이름으로 치환해서 쓸 수 있다.


T.let vs T.also

- 동일하나 Return value가 다르다.

- let은 마지막 코드의 결과를 리턴하고, also는 T를 리턴한다.


종합

Functions argument Return Function Type
run() this 마지막 객체 normal
with(T) this Unit normal
T.apply() this T extension
T.run() this 마지막 객체 extension
T.let() it 마지막 객체 extension
T.also() it T extension

 

'Kotlin' 카테고리의 다른 글

탑 레벨 함수 vs 싱글톤  (0) 2021.10.20
구체화된 타입 파라미터 'reified'  (0) 2021.10.20
Comments