8.1.1 함수 타입
fun main(args: Array<String>) {
val sum = { x: Int, y: Int -> x + y }
val action = { println(42) }
}
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 |