Kotlin

[Kotlin] Lamda(람다) 사용 방법

cob 2022. 9. 21. 08:35
람다식은 우리가 마치 value 처럼 다를 수 있는 익명 함수

1. 메소드의 파라미터로 넘겨줄 수가 있다. fun maxby(a : Int)
2. return 값으로 사용할 수 가 있다.

 

 


1. 람다의 기본 정의

val lamdaName : Type = { argList -> codeBody}
//선언(val, var)  : 타입 = { 받은 값(argument) -> 어떻게할 건지 함수 }

 

 

1-1) 타입 추론 가능

val square : (Int) -> (Int) = {number : Int -> number * number}
// Int를 넣고 Int으로 return 받음  input/output이 Int형이기 때문에
// number의 타입을 추론함(타입 추론 가능 앞이든 뒤든 Int 필수)

fun main() {
	println(square(12)) 
	// 144가 나옴
}

 

1-2) 람다에서는 마지막 파라미터가 리턴 값

val nameAge = {name : String, age : Int -> "my name is ${name} I'm ${age}" }

fun main() {
	println(nameAge("jacob", 29))
}
//my name is jacob I'm 29  출력
//함수를 변수안에 담을 수 있음

 

 


2. 확장 함수

val pizzaIsGreat : String.() -> String = {this : String this + "Pizza is the best!"}
//this가 가르키는 것은 String. 객체를 가르킴

fun main() {
	val a = "jacob"
	println(a.pizzaIsGreat())
	// jacob Pizza is the best! 출력
	// 변수 a가 String 클래스이기 때문에 pizzaIsGreat로 확장 가능
}

 

 

2-1) this와 it

fun extednString(name : String , age : Int) : String {
	val introduceMyself : String.(Int) -> String = { "I am ${this} and ${it} years old"}

	return name.introduceMyself(age)
}

fun main(){
	println(extednString("jacob", 29))
	// I am jacob and 29 years old
}
  • it은 파라미터 하나만 있을 때 해당 파라미터를 가리킴 (" Int ")
  • this는 확장 함수를 콜 하는 object를 가리킴 ("String.()")

 

 


3. 람다의 RETURN 박식

// Double를 받고 Boolean을 받고 싶다  :  받는자료형 Boolean
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
	return lamda(5.2343)
}

fun main(){
	val lamda = {number : Double -> number == 4.3213}
	
	println(invokeLamda(lamda))       // false 출력
	println(invokeLamda({it > 3.22})) // true 출력
	println(invokeLamda {it > 3.22})  // 첫번째 파라미터이자 마지막 파라미터이기 때문에 ()생략가능
	//마지막 파라미터가 람다식일 때 
}
반응형