2월, 2020의 게시물 표시

코틀린 (Kotlin) 고차함수

코틀린 고차함수 재사용성     val sum: (Int, Int) -> Int = { x, y -> x + y }     val product: (Int, Int) -> Int = { x, y -> x * y }     val minus: (Int, Int) -> Int = { x, y -> x - y }         println(higherOrder(sum, 1, 5))     // 6     println(higherOrder(minus, 5, 2))   // 3     println(higherOrder(product, 4, 2)) // 8 기능확장성     val twiceSum: (Int, Int) -> Int = { x, y -> (x + y) * 2 }     println(higherOrder(twiceSum, 8, 2))   // 20 간결성 map, filter 로 간결하고 가독성을 향상시킴     val result2 = ints             .map { it * 2 }             .filter { it > 10 }     println(result2)      부분 함수 특정한 값이나 범위내에 있을 때만 함수가 동작하도록 할수 있음 호출자가 함수가 던지는 예외나 오류값에 대해서 몰라도 된다 부분 함수의 조합으로 부분 함수 자체를 재사용할 수도있고, 확장할 수도 있다 class PartialFunction <in P, out R> (     private val condition: (P) -> Boolean,     private val f: (P) -> R)     : (P) -> R {     override fun invoke(p: P): R = when {         condition(p)

코틀린 (Kotlin) 함수형 프로그래밍

함수형 프로그래밍 불변성(immutable) 참조 투명성(referential transparency) 일급 함수(first-class-function) 게으른 평가(lazy evaluation) 순수한 함수 동일한 입력->동일한 결과 부수효과 없음 부수효과... 전역 변수, 객체 상태변경 파일, 네트워크 출력 예외발생 일급 함수 함수를 함수 매개변수로 사용 함수를 반환값으로 사용 함수를 변수에 저장 가능 게으른 평가 val lazy: String by lazy {    //long work... } print(lazy) print(lazy) 값을 사용할 때 lazy{...} 작업이 실행되어 할당된다. 코드가 실행될때 할당되지 않기때문에 오래걸리는 작업을 필요할때 실행하여 작업을 효율적으로 동작가능. val 로만 가능하며 최초 한번만 할당되고 두번째부터는 값이 재사용된다. 시퀀스(sequence) val infinite = generatieSequence(0) { it + 10 } infinite.take(10).forEach {println("$it")} 실제 사용할때 사용되기때문에 무한대 자료구조로서 사용할 수 있다. Unit public object Unit { override fun toString() = "kotlin.Unit" } Unit 은 자바의 void 처럼 아무것도 반환하지 않을때 사용. Unit 은 참조형 타입이다. 확장함수 private fun String.addHelloPrefix(): String = "Hello, ${this}" if 조건 표현식 조건문을 구문과 표현식으로 사용할 수 있다. 표현식으로 사용된 경우 else 가 필요하며 변수에 할당할 수 있다. val x: Int