본문 바로가기

Android.log

[31 Days Of Kotlin - 1일차] let, apply, with, run

반응형

코틀린 학습 중에 Android Developer 트위터에서 게시한  [31 Day Of Kotlin] 을 학습 하고 있습니다.


(https://twitter.com/i/moments/980488782406303744)



1일차로 let, apply ,with, run 에 대해서 정리 하겠습니다.




코틀린에서 기본으로 지원하는 기능으로 잘 사용하면 간결하고 간편하게 코드를 작성 할 수 있다.



각각 함수 안에서 this와 it 이 바라보는 값과, return value 에 대해 주의깊게 봐야 한다.



안드로이드 스튜디오에서는 친절하게 함수 안에서 사용할 수 있는 변수 들과 리턴되는 정보에 되해서 가이드 해주고 있다.




1. let 

  • this - 함수가 선언 된 클래스를 나타냅니다
  • it - let 을 호출한 변수를 가르킵니다.
  • return value - 끝에 입력된 값이 리턴 됩니다.

public inline fun <T, R> T.let(block: (T) -> R): R

@Test
fun letTest() {
println("== let ==")
val string = "a"
val result = string.let {
println("this = $this, it = $it")
2
}
println("result $result")
Assert.assertEquals(2, result)
}
== let ==
this = com.tistory.ykyh.kotlin31dayssample.Day1@3d82c5f3, it = a
result 2


2. apply

  • this - apply 를 호출한 변수를 가르킵니다.
  • it - 지원되지 않습니다. 사용시 컴파일 에러가 발생합니다.
  • return value - 마지막 값 리턴 미지원 입니다.
public inline fun <T> T.apply(block: T.() -> Unit): T
@Test
fun applyTest() {
println("== apply ==")
val string = "a"
val result = string.apply {
println("this = $this, it = none")
2
}
println("result $result")
Assert.assertEquals("a", result)
}
== apply ==
this = a, it = none
result a


3. with

  • this - with 를 호출한 변수를 가르킵니다.
  • it - 지원되지 않습니다. 사용시 컴파일 에러가 발생합니다.
  • return value - 끝에 입력된 값이 리턴 됩니다.
  • 결과는 run 하고 동일 하나 사용 방법이 다릅니다.
public inline fun <T, R> with(receiver: T, block: T.() -> R): R
@Test
fun withTest() {
println("== with ==")
val string = "a"
val result = with(string) {
println("this = $this, it = none")
2
}
println("result $result")
Assert.assertEquals(2, result)
}
== with ==
this = a, it = none
result 2


4. run

  • this - run 을 호출한 변수를 가르킵니다.
  • it - 지원되지 않습니다. 사용시 컴파일 에러가 발생합니다.
  • return value - 끝에 입력된 값이 리턴 됩니다.
  • 결과는 with 하고 동일 하나 사용 방법이 다릅니다.
  • Standard.kt 에 T.run() 과 run() 이 존재 한다. run() 은 this 는 클래스를 가르키고, 끝에 입력된 값을 리턴한다.
public inline fun <T, R> T.run(block: T.() -> R): R
@Test
fun runTest() {
println("== run ==")
val string = "a"
val result = string.run {
println("this = $this, it = none")
2
}
println("result $result")
Assert.assertEquals(2, result)
}
== run ==
this = a, it = none
result 2




코틀린 기본 함수 들은 Standard.kt 에서 확인 할 수 있습니다.

반응형