- 메소드의 파라미터로 넘겨줄 수 있다.
- return 값으로 사용할 수가 있다.
val lamdaName(람다의 이름) : Type(input 타입과 output 타입)
-> = {argumentList -> codeBody}
* 타입 추론하기 위해서는 Type or argumentList 한 부분에는 타입 선언을 해주어야 한다.
val bookCover : String.() -> String = {
this + "bookCover is .."
}
fun extendString(name : String, age: Int) : String {
val introduceMyself : String.(Int) -> String = {"I am ${this} and ${it} years old"} // 파라미터가 하나로만 들어가는 경우에는 it으로 생략이 가능하다.
return name.introduceMyself(age)
}
fun main () {
val a = "water"
val b = "mouse"
println(a.bookCover())
println(b.bookCover())
println(extendString("Ethan", 256))
// 1. waterbookCover is..
// 2. mousebookCover is..
// 3. I am Ethan and 256 years old
// Int 는 항상 소 가로를 사용해주어야 한다.
fun main () {
println(calculateGrade(79))
}
val calculateGrade : (Int) -> String = { // 람다는 리턴을 할 때 마지막 표현식이 리턴의 value 타입을 지정한다.
when(it) {
in 0..40 -> "fail"
in 41..70 -> "pass"
in 71..100 -> "perfect"
else -> "Error"
}
}
// perfect가 나온다.
fun invokeLamda(lamda: (Double) -> Boolean ) : Boolean {
return lamda(5.233)
}
fun main() {
val lamda = {number: Double -> // 하나만 선언되었기 때문에 it 가능.
number == 4.313 // 위에서 선언한 lamda(5.233)과 다르니 false가 나온다.
}
println(invokeLamda(lamda))
println(invokeLamda({it>3.23}) // 위에서 선언한 숫자가 크니 true
invokeLamda { it > 3.23 } // 람다함수는 위와 똑같은 식이지만, 생략해서 출력 가능하다.
// it은 invokeLamda에서 선언된 하나의 피라미터를 뜻한다.
프로그래머스에서 입문 알고리즘을 풀고 있는데 매 문제마다 몰랐던 새로운 것들이 나와서 어렵게 느껴진다. 나중에 lv1, lv2로 넘어가야하는데 벌써 머리가 어지럽다 ㅎㅎ 계속 꾸준히 해봐야지 ㅎㅎ