코틀린은 함수형 프로그래밍이다.
컨셉
변경 가능한 상태를 불변상태로(Immutable)로 만들어 SideEffect를 없애자.
모든 것은 객체이다.
1급 객체(Fist Class Object)란?
Java는 method를 변수에 할당할 수 있고, 인자로 넘길 수 없으며, 리턴할 수 없으므로 일급 객체가 아니다.
//일반함수 add,
fun add(x1:Int, x2:Int):Int {
return x1 + x2
}
//한줄일 경우 brace 생략하고 = 으로 assign
fun add1(x1:Int, x2:Int):Int = x1 + x2
//return type 생략, 추론가능
fun add2(x1:Int, x2:Int) = x1 + x2
val add = { x1: Int, x2: Int -> x1 + x2 }
fun main() {
val result = add(10, 20)
println(result)
람다식이 여러줄일때는 마지막 라인을 리턴한다.
// 생략되지 않은 전체 표현 방식
val sum: (Int, Int) -> Int = { x1: Int, x2: Int -> x1 + x2 }
// 선언 자료형 생략
val sum = {x: Int, t: Int -> x+y }
// 람다식 매개변수 자료형의 생략
val sum: (Int, Int) -> Int = {x, y -> x+y}
// 에러 발생.. 추론이 불가능하기 때문
val sum = {x, y -> x+y}
val hello: () -> Unit = {println("Hello")}
val add: (Int) -> Int = {x-> x+x}
val hello = {println("Hello")}
val add = {x:Int-> x+x}