1. Lamde(람다)
(1) - 람다식을 변수에 담기
*var K : (Int, Int) -> Int = {a, b -> a+b} 혹은
var K ={a : Int, b : Int -> a+b} 처럼
둘중 한 항의 타입만 적어주면 나머지 항은 자동추론이 된다
(2) - 람다식을 함수에 담기
*fun Lamda(아무변수명가능 : (Int, Int)-> Int){
println(K(1,2))
}
(3) - 람다식의 표현법
*자바스크립트와 같은코드 언어비교
*람다함수의 리턴값이 여러줄인 경우 마지막 값을 최종적으로 리턴한다!
2. 람다 리터럴 표현식
(1) - 파라미터가 1개인 람다식의 람다리터럴 표현식
1. Lamda{it +2}는 원래 Lamda({it +2})로 Lamda()라는 함수가 it+2를 리턴값으로 가지는 it이라는 파라미터 1개를 가진 함수(원래 라면 {it:int -> it+2} 라고 쓰여져야하지만 코틀린의 특성상 it:int ->를 생략하고 {it+2}로 표현)를
파라미터로 가지고 그 it+2 라는 리턴값을 Lamda()라는 함수 내용에 사용하고 있다는 것을 나타내며
2. it을 어떻게 정의 내리고 사용하고 있는지는 Lamda()라는 함수의 구현내용을 들여봐야 알 수 있으며
3. Lamda{it +2}의 리턴값이 무엇인지 또한 Lamda()라는 함수의 구현내용을 들여다봐야 알 수 있다
따라서 a.let{it.length}와 같은 scope함수를 해석할때
let은 {it.length}의 리턴값을 가지는 파라미터가 1개인 함수를 파라미터로 가지고 있으며 -> let({it.length})
그 it이 a를 뜻한다는 것과 a.let{it.length} 전체가 {}안의 값을 리턴한다는 것은
우리가 let을 들여다보지 않는 이상 그 원리는 알 수 없기에 해당 사실을 받아들이면 된다는 것이다
4. 또한 Lamda{it +2}를 Lamda{it *3}과 같이 파라미터함수의 구조를 직접 변경이 가능 하며
Lamda()함수의 내부구조에서 {}안의 파라미터함수의 구조식을 사용하기 때문에
만약 Lamda()함수의 내부구조에서 {}안의 파라미터함수가 어떤식으로 작동하는지 알고 있다면
사용자가 Lamda{~~} 의 ~~구조를 바꾸어 다른 값을 출력할 수 있다
이것은 마치 나중에 배우면서 자주 써먹을 코드
botton.SetOnclickListener{it : View
//to do..
} 이 코드를 통해 {}안의 내용인 to do를 수정하여 우리가 원하는 다른 값을 출력하는 것과 마찬가지 이다
(2) - 파라미터가 2개이상인 람다식의 람다 리터럴 표현식
(2) - 1 위 예제 에선 Lamda(k:1){i:int,d:Double -> i +d }를 사용해서 11.1이 출력되었지만
우리가 Lamda(k:1){i:int,d:Double -> i *d }등으로 Lamda()함수가 가지는 파라미터함수의 리턴값을 수정해서
Lamda()함수 내부에서 사용되는 파라미터함수의 리턴값수식을 변형시켜 다른 값 (1) 을 출력할 수 있다
(3)아래 예제와 같이 when등을 사용하여 복잡하게 만들 수 도 있음
3. OnclickListener에서 람다 리터럴 표현식을 쓰는 예제 (실전편)
'Java and Android > Android Kotlin' 카테고리의 다른 글
Android Kotlin - data class, enum class (0) | 2020.12.23 |
---|---|
Android Kotlin - 스코프함수 (0) | 2020.12.23 |
Android Kotlin - class, 상속, 추상화, 인터페이스 (0) | 2020.12.19 |
Android Kotlin - for, while, Non-null, Nullable (0) | 2020.12.08 |
Android Kotlin - 함수,변수,조건식,배열,리스트 (0) | 2020.12.02 |