[Kotlin] 표준 함수

sundays·2022년 8월 31일
0

kotlin

목록 보기
4/19

1. closure

fun main() {

    val calc = Calc()
    var result = 0 // 외부의 변수
    calc.addNum(2,3) { x, y -> result = x + y }  // 클로저
    println(result) // 값을 유지하여 5가 출력
}

class Calc {
    fun addNum(a: Int, b: Int, add: (Int, Int) -> Unit) { // 람다식 add에는 반환값이 없음
        add(a, b)
    }
}

2. let()

  • let()함수는 함수를 호출하는 객체 T를 이어지는 block의 인자로 넘기고 block의 결과값 R을 반환합니다.
	// 표준 함수의 정의
	public inline fun <T, R> T.let(block: (T) -> R): R { ... return block(this) }

	// 예제
    val score: Int? = 32
	...
    // let을 사용해 null 검사를 제거
    fun checkScoreLet() {
        score?.let { println("Score: $it") } // ①
        val str = score.let { it.toString() } // ②
        println(str)
    }

3. also()

  • also()는 함수를 호출하는 객체 T를 이어지는 block에 전달하고 객체 T 자체를 반환합니다.
// 표준 함수의 정의
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }

// 예제
var m = 1
m = m.also { it + 3 }
println(m) // 원본 값 1

4. apply()

  • apply()함수는 also()함수와 마찬가지로 호출하는 객체 T를 이어지는 block으로 전달하고 객체 자체인 this를 반환합니다.
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }

5. run()

  • run()함수는 인자가 없는 익명 함수처럼 동작하는 형태로 단독 사용하거나 확장 함수 형태로 호출하는 형태 두 가지로 사용할 수 있습니다.
public inline fun <R> run(block: () -> R): R  = return block()
public inline fun <T, R> T.run(block: T.() -> R): R = return block()

6. with()

  • with()함수는 인자로 받는 객체를 이어지는 block의 receiver로 전달하며 결과값을 반환합니다.
  • run()함수와 기능이 거의 동일한데, run의 경우 receiver가 없지만 with()에서는 receiver로 전달할 객체를 처리합니다.
// 표준 함수의 정의
public inline fun <T, R> with(receiver: T, block: T.() -> R): R  = receiver.block()

7. use()

  • 보통 특정 객체가 사용된 후 닫아야 하는 경우가 생기는데 이때 use()를 사용하면 객체를 사용한 후 close() 등을 자동적으로 호출해 닫아 줄 수 있습니다.
// 표준 kotlin함수의 정의
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R 

8. take()

// 표준 함수의 정의
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T?
  = if (predicate(this)) this else null

8.1 takeif

  • takeIf()함수의 정의에서 볼 수 있듯이 predicate 는 T 객체를 매개변수로서 받아오고, true이면 this를 아니면 null을 반환합니다.

8.2 takeUnless

  • takeUnless함수는 !predicate()가 사용되어 false일 때 반환됩니다.

9. random()

Reference

  • 코틀린 프로그래밍 기본 1 - 황영덕
profile
develop life

0개의 댓글