// 함수를 선언하면 스택에 쌓이게 되며 프레임 정보를 가진다
fun sum(a: Int, b: Int): Int {
return a + b
}
fun sum(a: Int, b: Int): Int = a + b // 간략화된 함수
fun sum(a: Int, b: Int) = a + b // 반환 자료형 생략 가능 Int + Int = Int로 추론
// 순수함수의 예
fun sum(a: Int, b: Int): Int{
return a + b
}
// 순수 함수가 아닌 것
fun check(){
val test = User.grade() // 외부 객체 사용
if (test != null) process(test) // test는 User.grade()의 실행 결과에 따라 달라짐
}
val sum: (Int, Int) -> Int = {x: Int, y: Int -> x + y }
val sum = {x: Int, y: Iny -> x + y} // 선언 자료형 생략
val sum (Int, Int) -> Int = {x,y -> x + y} //람다식 매개변수 자료형 생략
val greet: () -> Unit = {println("Hello Kotlin") } // 반환 자료형이 없을 때
val square: (Int)->Int = {x -> x*x} // 매개변수가 하나 일 때
val nestedLambda: ()->()->Unit = {{println("nested")}} // 람다식 안에 람다식이 있는 경우
fun sum(x: Int, y: Iny) = x + y
func Param(3, 2, sum) // 에러 sum은 람다식이 아니다
func Param(3, 2, ::sum) // ::함수명으로 표현해줘야 함
// 매개변수가 없을 경우
fun main(){
noParam({"Hello World!"})
noParam{ "Hello World!" } // 소괄호 생략 가능
}
fun noParam(out: () -> String) = println(out())
// 매개변수가 한 개인 경우
fun main(){
oneParam({a -> "Hello World! $a" })
oneParam{ a -> "Hello World! $a" } // 소괄호 생략 가능
oneParma { "Hello World! $it" }
}
fun oneParam(out: (String) -> String){
prlintln(out("OneParam"))
}
// 매개변수를 생략하는 경우
moreParam { _, b -> "Hello World! $b"} // 첫번째 문자열은 생략
// 마지막 인자가 람다식인 경우 소괄호 바깥으로 분리가능
withArgs("Arg1", "Arg2") { a,b -> "Hello World! $a $b" }
fun (x: Int, y: Int): Int = x + y
val add: (Int, Int) -> Int = fun(x,y) = x + y
val result = add(10,2)
val add = fun(x:Int, y: Int) = x + y
val add = { x: Int, y: Int -> x + y }
inline fun shortFunc(a: Int,noinline out: (Int) -> Unit){
println("Hello")
out(a)
}
infix fun Int.strPlus (x: String): String {
return "$x version $this"
}
fun main() {
val str1 = num strPlus "Kotlin" // 중위 표현법 밑과 동일결과
val str2 = num.strPlus("Kotlin")
}
부스트코스 코틀린강좌를 참고하였습니다.