Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • til
  • 코틀린 인 액션
  • kibana
  • 안드로이드
  • 내림차순
  • 에라토스테네스의 체
  • kotlin
  • SQL
  • enum
  • 다이나믹 프로그래밍
  • 백준
  • elasticsearch
  • Docker
  • rsocket
  • 우아한테크코스
  • Wil
  • java
  • 코틀린
  • webflux
  • MariaDB
  • 파이썬
  • spring
  • 문자열
  • ec2
  • 프로그래머스
  • grafana
  • 레포지토리
  • 프리코스
  • 코딩테스트
  • Android

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

[코틀린 인 액션] 8장 정리: 고차 함수

2022. 12. 13. 04:04

8.1.1 함수 타입

fun main(args: Array<String>) {
    val sum = { x: Int, y: Int -> x + y }
    val action = { println(42) }
}

컴파일러는 sum과 action이 함수 타입임을 추론

 

   1. 람다 인자 타입 선언

    - 각 변수에 구체적인 타입 선언을 추가하면 람다식 안에서 파라미터의 타입을 선언하지 않아도 됨

fun main(args: Array<String>) {
    val sum: (Int, Int) -> Int = { x, y -> x + y }
    val action: () -> Unit = { println(42) }
}

 

   2. 함수 타입에서 파라미터 이름 지정

   -  함수 타입의 람다를 정의할 때 파라미터 이름이 꼭 함수 타입 선언의 파라미터 이름과 일치하지 않아도 됨

fun performRequest(
    url: String,
    callback: (code: Int, content: String) -> Unit
) {
    println("url: $url")
    callback(2, "Kotlin")
}

fun main(args: Array<String>) {
    val url = "http://kotl.in"
    performRequest(url) { code, content -> println(content + code.toString()) }
    performRequest(url) { num, page -> println(num + code.toString()) }
}

 

8.1.2 인자로 받은 함수 호출

fun twoAndThree(operation: (Int, Int) -> Int) {
    val result = operation(1, 2)
    println("The result is $result")
}

fun main(args: Array<String>) {
    twoAndThree { x, y -> x + y }
    twoAndThree { x, y -> x * y }
}

 

fun twoAndThree(n1: Int, n2: Int, operation: (Int, Int) -> Int) {
    val result = operation(n1, n2)
    println("The result is $result")
}

fun main(args: Array<String>) {
    twoAndThree(1, 3) { x, y -> x + y }
    twoAndThree(1, 3) { x, y -> x * y }
}

 

8.1.4 디폴트 값을 지정한 함수 타입 파라미터나 널이 될 수 있는 함수 타입 파라미터

   1. 함수 타입의 파라미터에 대한 디폴트 값 지정

import java.lang.StringBuilder

fun <T> Collection<T>.joinToString(
    separator: String = ", ",
    prefix: String = "",
    postfix: String = "",
    transform: (T) -> String = { it.toString() }
): String {
    val result = StringBuilder(prefix)
    for ((index, element) in this.withIndex()) {
        if (index > 0) result.append(separator)
        result.append(transform(element))
    }
    result.append(postfix)
    return result.toString()
}

fun main(args: Array<String>) {
    val letters = listOf("Alpha, Beta")
    println(letters.joinToString())
    println(letters.joinToString { it.lowercase() })
    println(letters.joinToString(prefix = "[ ", postfix = " ]", transform = { it.uppercase() }))
    println(letters.joinToString(prefix = "[ ", postfix = " ]") { it.uppercase() })
}

 

728x90

'Android > Kotlin' 카테고리의 다른 글

[Kotlin] Delegate Pattern 사용하기  (0) 2022.12.14
[코틀린 인 액션] 7장 정리: 연산자 오버로딩  (0) 2022.12.05
[코틀린 인 액션] 6장 정리: null 다루는 방법  (0) 2022.11.30
[코틀린 인 액션] 5장 정리  (0) 2022.11.30
[코틀린 인 액션] 4장 정리  (0) 2022.11.29
    'Android/Kotlin' 카테고리의 다른 글
    • [Kotlin] Delegate Pattern 사용하기
    • [코틀린 인 액션] 7장 정리: 연산자 오버로딩
    • [코틀린 인 액션] 6장 정리: null 다루는 방법
    • [코틀린 인 액션] 5장 정리
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바