끄적끄적
Scope Function(with, run, T.with, T.run, let, also, apply) 본문
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