woong's
android Scope Function 본문
- Let (fun <T, R> T.let(block: (T) -> R): R)
- Context Object : it
- Return Value : Rambda result
- 사용목적 : let 은 null 체크 , null 이 아닌 값으로 블록을 생성할때 많이 활용 됨
- let을 통해서 null 이 아닌 block 을 사용할때 null 인 block 을 사용하려면 (?:) 를 통해서 가능
@Test
fun testLet() {
val user = User("woong",20)
val returnValueName = user?.let {
it.name //(T) -> R(name)
}
val returnValueAge = user?.let {
it.age //(T) -> R(age)
}
val returnValueUser = user?.let {
it.age
it //(T) -> R(it)
}
println("### $returnValueUser")
}
- Apply (fun <T> T.apply(block: T.() -> Unit): T)
- Context Object : this
- Return Value : Context Object
- 사용목적 : 객체 초기화시 많이 활용 됨
@Test
fun testApply() {
//Apply 사용 X
val user01 = User()
user01.name = "woong"
user01.age = 20
//Apply 사용 O
val user02 = User().apply {
name = "woong"
age = 20
}
println("### $user02")
}
- Also
- Context Object : it
- Return Value : Context Object
- 사용목적 : 객체를 수정 , 변경 하지 않고 , 로그 및 정보 확인으로 활용됨
@Test
fun testAlso() {
//Also 사용 X
val user01 = User()
user01.name = "woong"
user01.age = 20
println("### ${user01}")
//Apply 사용 O
User().apply {
name = "woong"
age = 20
}.also {
println("### ${it}")
}
}
Run (fun <T, R> T.run(block: T.() -> R): R) , (fun <R> run(block: () -> R): R)
- Run
- Context Object : this
- Return Value : Rambda result
- with 와 달리 Safe Call (?.) 이 가능해서 with 보다 활용도가 좋음
- 사용 목적 : 어떤 값을 도출할때 불필요한 지역 변수의 범위를 제한할때 사용
@Test
fun testRun() {
//Run 사용 X
val user01 = User()
user01.name = "woong"
user01.age = 20
//user 접근이 가능함
println("### ${user01.name}(${user01.age})")
//Run 사용 O
val nameAge = run {
User().apply {
name = "woong"
age = 20
}.run {
"${name}($age)"
}
}
//user 접근 이 불가능하게 할수 있음
println("### ${nameAge}")
}
- With (fun <T, R> with(receiver: T, block: T.() -> R): R)
- Context Object : this
- Return Value : Rambda result
- run 과 달리 not-null 객체를 사용 , 객체의 함수를 여러개 호출할때 그룹화 용도로 활용
@Test
fun testWith() {
//With 사용 X
val user01 = User()
user01.name = "woong"
user01.age = 20
//With 사용 O
with(user01) {
printName()
printAge()
}
}
Scope Fuction | Context Object | Return Value |
Let | It | Rambda result |
Apply | This | Context Object |
Also | It | Context Object |
Run | This | Rambda result |
With | This | Rambda result |
'Develop > Android' 카테고리의 다른 글
디바이스 상태 명령어 정리 (0) | 2021.03.08 |
---|---|
[안드로이드 어플][급상승 3위] 단축이: 키보드 대치 , 오토 핫키 , 문구 대체 , 상용구 (0) | 2020.05.17 |
[안드로이드 어플] 단축이: 짧은 단축어로 반복적인 문장 , 불편한문구 대체하세요 (2) | 2020.05.10 |
Android Kotlin VO 사용하기 (0) | 2017.12.10 |
Android Kotlin When 사용하기 (0) | 2017.12.10 |
Comments