FunctionalProgram
fun testFun1( a1:Int, a2:Int):Int{
return a1+a2
}
- 함수의 리턴값이 호출된곳에서 리턴값을 받는 변수의 자료형을 결정합니다
fun testFun2(a1:Int, a2:Int) : Int = a1 + a2
-함수의 리턴값이 간단한 수식으로 해결된다면 = 과 함께 연결하여 return 명령을 대신합니다.
testFun1 과 testFun2 는 같은 동작을 하는 함수입니다
fun testFun3(a1:Int, a2:Int) = a1 + a2
-리턴값의 자료형이 아래와 같이 정수와 정수의 연산이어서 그 결과도 정수라면, 그리고 그 정수가 리턴될꺼라면
함수의 리턴자료형도 생략 가능합니다
val r3 = testFun1(100, 200)
val r4 = testFun2(100, 200)
val r5 = testFun3(100, 200)
- r3, r4, r5 에 300 저장
- 함수의 리턴값이 Int형으로 명확하기 때문에 변수에도 자료형을 쓰지 않습니다.
<람다 함수 : 함수의 초간단 간략형 표현으로 , 함수의 몸체를 변수에 담아 사용하도록 변형한 형태 >
val lambda1 : ( Int, Int ) -> Int = { a1:Int, a2:Int -> a1+a2 }
- ( Int, Int ) : 매개변수의 갯수와 자료형
- { a1:Int, a2:Int -> a1+a2 } 앞에 정의된 자료형에 맞춰 사용되는 실제 매개변수 와 연산식 & 리턴값
- Int = & ->a1+a2 : 리턴값의 자료형과 리턴값
- lambda1 : 함수의 이름
- : ( Int, Int ) -> Int : 함수의 전체 자료형 (매개변수와 리턴값)
- { a1:Int, a2:Int -> a1+a2 } : a1, a2 는 실제 매개변수 a1+a2 는 실제 리턴값
val r6 = lambda1( 100, 200 )
println("r6 : $r6")
-> r6: 300 출력
val lambda2 = { a1:Int, a2:Int -> a1+a2 }
- 매개변수, 리턴값의 자료형이 명확하다면 ':' 이후부터 '=' 이전 까지 생략 가능합니다
val r7 = lambda2(100, 200)
println("r7 : $r7")
->r7: 300 출력
val lambda3 : (Int, Int) -> Int = {a1, a2 -> a1 + a2}
val r8 = lambda3(100, 200)
println("r8 : $r8")
- 헤더를 생략하지 않고 함수 바디쪽 자료형을 생략한 형태
val lambda4 = { a1:Int, a2:Int ->
val r1 = a1 + a2
val r2 = a1 - a2
r1 * r2 // 맨 마지막에 리턴값만 쓰면 , 람다함수의 리턴값으로 인식됩니다.
}
val r9 = lambda4(100, 200)
println("r9 : $r9")
- '-30000'출력
val lambda5 : () -> Unit ={ print("lambda5 호출") }
lambda5()
-매개변수와 리턴값이 없는 람다 함수