[코틀린기초] 16. 자주 사용되는 표준함수들

takeIf() 와 takeUnless

takeIf는 람다식이 true면 객체 T를 반환하고 그렇지 않은 경우 null을 반환,
takeUnless는 람다식이 false면 T를 반환하고 그렇지 않은 경우 null을 반환

public inline fun <T> T.takeIf(predicate: (T)->Boolean): T?
  = if(predicate(this)) this else null
someObject?.takeIf{it.status}?.apply{ doThis() }
val input = "Kotlin"
val keyword = "in"

//입력 문자열에 키워드가 있으면 인덱스를 반환하는 함수
input.indexOf(keyword).takeIf{it >= 0} ?: error("keyword not found")
input.indexOf(keyword).takeUnless{it < 0} ?: error("keyword not found")

시간의 측정

kotlin.system 패키지에 있는 두 개의 측정 함수

measureTimeMillis() measureNanoTime()

선언부

// 선언부 
public inline fun measureTimeMillis(block: () -> Unit) Long{
  val start = System.currentTimeMillis()
  block()
  return System.currentTimeMillis() - start
}

사용법

val executionTime = measureTimeMillis{
  //측정할 작업 코드
}

println("Execution Time = $executionTime ms")

난수 생성하기

자바의 java.util.Random을 이용할 수도 있지만 JVM에만 특화된 난수를 생성하기 때문에
코틀린에서는 멀티플랫폼에서도 사용 가능한 kotlin.random.Random을 제공한다

import kotlin.random.Random

val number = Random.nextInt(21)