fun 함수 이름([변수 이름: 자료형, 변수 이름: 자료형..]): [반환값의 자료형]{
표현식...
[return 반환값]
}
줄여서 쓸쑤도 있다.
fun sum(a: Int, b:Int) = a + b
- 반환값이 없는 함수: 반환값의 자료형을 Unit으로 지정한다. 생략시 반환값의 자료형을 void가 아닌 Unit으로 추론한다.
fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a+b}") }
함수의 매개변수에 기본값 지정하기
매개변수 이름과 함께 함수 호출하기
가변인자(Variable Argument)
가변 인자를 통해 인자의 개수가 변하는 경우.
vararg
를 선언
함수형 프로그래밍은 순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법을 말한다. 코드가 간략화되고 테스트나 재사용성이 좋아 개발 생산성이 늘어나는 장점이 있다.
함수형 프로그래밍의 정의와 특징
1. 순수 함수를 사용해야 한다.
2. 람다식을 사용할 수 잇다.
3. 고차 함수를 사용할 수 있다.
람다식: 일급함수에서 이름이 없는 함수
{ x, y -> x + y }
고차 함수: 다른 함수를 인자로 사용하거나 함수를 결과값으로 반환하는 함수.
fun main() { println(highFunc({ x, y -> x + y}, 10, 20)) // 람다식 함수를 인자로 넘김 } fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b) // sum 매개변수는 함수
116p참고
변수에 할당하는 람다식 함수 작성하기
매개변수에 람다식 함수를 이용한 고차 함수
JVM에서 실행되는 자바나 코틀린은 함수를 호출할 때 인자의 값만 복사하는 값의 의한 호출이 일반적이다. 포인터 주소 연산이 없기 때문에 참조에 의한 호출은 사용되지 않는다.
값의 의한 호출 : 함수가 또 다른 함수의 인자로 전달될 경우 람다식 함수는 값으로 처리되어 그 즉시 함수가 수행된 후 값을 전달한다.
이름에 의한 람다식 호출: 매개변수로 람다식을 전달하여 필요할 때 람다식 함수를 호출한다.
다른 함수의 참조에 의한 일반 함수 호출: 람다식이 아닌 일반 함수를 다른 함수의 인자에서 호출하는 고차 함수의 경우 2개의 콜론(::) 기호를 사용한다.
람다식의 매개변수(없을때, 1개, 2개)
2개 이상일때
val add:(Int,Int)->Int=fun(x,y)= x+y
val addLikeLambda = fun(x: Int, y: Int) = x + y
일반적인 재귀함수
꼬리 재귀함수
범위 연산자 in ..
변수이름 in 시작값..마지막값
when 문으로 다양한 조건 처리하기(switch와 비슷)
when(인자) {
인자에 일치하는 값 혹은 표현식 -> 수행할 문장
인자에 일치하는 범위 -> 수행할 문장
...
else -> 수행할 문장
}
switch와 달리 각 수행 문장을 멈추는 break가 필요하지 않는다.
인자를 검사할때 값, 표현식, 범위를 넣을 수 있다는 점.
when에 인자를 주지 않는 경우.
다양한 인자 받기