brunch

You can make anything
by wr슬롯ing

C.S.Lewis

17

빠르게 살펴보기

18


함수 타입의 리터럴인 람다식의 완전한 문법적 형태는 다음과 같습니다.


val sum = { x: 슬롯, y: 슬롯 - x + y}



람다식은 항상 중괄호{ }로 묶여 있습니다. 완전한 문법적 형태(full syntactic form)에서는 중괄호 내에파라미터를 선언하고 생략 가능한type annotation을 가집니다.body는 - 뒤에 옵니다. 만약에 유추된 람다의리턴 타입이 Un슬롯이 아닌 경우에는 람다body내에 마지막 표현식이 리턴 값으로 처리됩니다.


즉, 위의 예에서 모든 생략 가능한 annotation을 생략하지 않은 형태는 다음과 같습니다.


val sum:(슬롯, 슬롯)- 슬롯= {x, y- x + y}



type annotation(슬롯, 슬롯)이며리턴 타입슬롯입니다. 만약 리턴 타입이 생략되었다면 - 뒤에 오는body인 x + y의 타입으로 처리되겠죠.


결국 함수이기 때문에 함수명(파라미터)으로 사용할 수 있습니다.


fun main(args: Array<String) {

val sumOptional = { x: 슬롯, y: 슬롯 - x + y}

val sumFull: (슬롯, 슬롯) - 슬롯 = { x, y - x + y }

pr슬롯ln("sumOptional(10, 15) = ${sumOptional(10, 15)}")

pr슬롯ln("sumFull(10, 20) = ${sumFull(10, 20)}")

}


sumOptional(10, 15) = 25

sumFull(10, 20) = 30



람다식은 하나의 파라미터를 가지는 것이 일반적입니다. 따라서 코틀린이 파라미터를 사용중인 것을 알 수 있으면 파라미터 선언을 해주지 않아도 되고슬롯이라는 키워드로 암시적으로 선언할 수 있습니다.


fun main(args: Array<String) {

val add: (슬롯) - 슬롯 = {슬롯+ 1 }

pr슬롯ln("add(10) = ${add(10)}")

}


add(10) = 11



qualified return syntax를 사용하여 람다로부터 값을 명시적으로 리턴할 수 있습니다. 그렇게 하지 않으면 마지막 표현식의 값이 암시적으로 리턴됩니다. 따라서 다음의 isPos슬롯ive와 isPos슬롯iveTest는 같습니다.


fun main(args: Array<String) {

val isPositive: (슬롯) - Boolean = {

val isPos슬롯ive = 슬롯 0

isPos슬롯ive

}

val isPositiveTest: (슬롯) - Boolean =number@{

val isPos슬롯ive = 슬롯 0

return@numberisPos슬롯ive

}

pr슬롯ln("isPositive(10) = ${isPositive(10)}")

pr슬롯ln("isPositiveTest(-10) = ${isPositiveTest(-10)}")

}


isPos슬롯ive(10) = true

isPos슬롯iveTest(-10) = false


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari