Kotlin : 스코프 함수, 람다함수란?

hjseo-dev·2022년 5월 9일
0

Android

목록 보기
11/18

📍 람다함수

람다함수 안에 여러 파라미터가 있으면 맨 마지막 값이 반환값이 된다
하나이면 it을 사용할 수 있다


//1. 파라미터가 여러개인 람다함수
val calculate:(Int,Int) -> Int = {a,b ->
	print(a)
	print(b)
	a+b  //맨 마지막 값을 반환
}

//2. 파라미터가 없는 람다함수
val a:() -> Unit = {println("파라미터가 없어요")}

//3. 파라미터가 하나인 람다함수
val c:(String) -> Unit = {println("$it 람다함수")}

📍 스코프함수

함수형 언어의 특징을 더 편리하게 사용할 수 있도록 기본 제공하는 함수들
instance의 속성이나 함수를 더 편하게 사용하도록 해준다

종류는 apply, run, with, also, let 5가지가 있다

1. apply

인스턴스 생성 후 변수에 담기 전 초기화 과정 수행, main 함수와 별도의 스코프에서 인스턴스의 변수와 함수를 조작하여 코드가 깔끔해진다

fun main() {
   val a Book("dada",10000).apply{
   name = "name is" + name
   discount()
}

class Book{
    fun discount(var name : String, var price: Int){
    	price -= 2000
    }
   
}

2. run

인스턴스 대신 결과값을 반환한다. 이미 만들어진 후 인스턴스의 함수나 속성을 스코프로 쓸 수 있다

fun main() {
   val a = Book("dada",10000).apply{
   name = "name is" + name
   discount()
   
   //run으로 변수의 접근가능
   a.run{
   		println("상품명 : ${name}, 가격 : ${price}원")
   }
}

class Book{
    fun discount(var name : String, var price: Int){
    	price -= 2000
    }
   
}

3. with

run과 같은 기능, 인스턴스를 패러미터로 받는다는 차이가 있다

a.run{} / with(a){}

4. also / let

각각 apply, run 같은 기능을 한다
처리가 끝나면 인스턴스 반환 apply / also
처리가 끝나면 최종 값 반환 run / let

  • 차이점은 it으로 인스턴스를 사용해야한다 : 같은 이름의 변수, 함수가 스코프 밖에 중복되어 있으면 혼란이 있을 수 있다
a.let{
	println("상품명 : ${it.name}, 가격 : ${it.price}원")
}

스코프 함수는 인스턴스의 속성과 함수를 scope안에서 분리해 사용하여 코드의 가독성을 향상해준다!

0개의 댓글