본문 바로가기

Java and Android/Android Kotlin

Android Kotlin - 람다

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에서 람다 리터럴 표현식을 쓰는 예제 (실전편)