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)      부분 함수 특정한 값이나 범위내에 있을 때만 함수가 동작하도록 할수 있음 호출자가 함수가 던지는 예외나 오류값에 대해서 몰라도 된다 부분 함수의 조합으로 부분 함수 자체를 재사용할 수도있고, 확장할 수도 있다 ...

코틀린 (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...