일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 생명주기
- Android
- 구분선
- IntentTestRule
- high order function
- ui test
- adapter
- 재사용
- espresso
- fragment
- 고차함수
- ActivityTestRule
- Fragment에서 Activity의 함수 사용하기
- 안드로이드스튜디오
- LayoutManger
- Error:Execution failed for task ':app:mergeDebugResources'
- 리사이클러뷰
- searchview
- 코틀린
- 안드로이드
- viewholder
- 뷰변경 감지
- 코딜리티
- binding adapter
- 안드로이드13
- 스와이프
- 테마 아이콘
- recyclerview
- 안드로이드개발레벨업교과서
- Fragment 수동 추가
- Today
- Total
룬아님의 취중코딩
Kotlin Bootcamp for Programmers 8. 람다와 고차함수 본문
you get an introduction to lambdas and higher-order functions in Kotlin.
Step 1: Learn about lambdas
1. 명명 된 함수와 마찬가지로 람다는 매개 변수를 가질 수 있습니다. 람다의 경우 매개 변수 (및 필요한 경우 유형)는 기능 화살표->의 왼쪽에 있습니다. 실행할 코드는 기능 화살표의 오른쪽으로갑니다. 람다가 변수에 할당되면 함수처럼 호출 할 수 있습니다.
var dirtyLevel = 20
val waterFilter = { dirty : Int -> dirty / 2}
println(waterFilter(dirtyLevel))
⇒ 10
이 예제에서 람다는 dirty라는 Int를 가져오고 dirty / 2를 반환합니다.
2. 함수 유형에 대한 Kotlin의 구문은 람다에 대한 구문과 밀접한 관련이 있습니다. 이 구문을 사용하여 함수를 보유한 변수를 명확하게 선언하십시오.
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
코드는 다음과 같습니다.
- waterFilter라는 변수를 만듭니다.
- waterFilter는 Int를 가져 와서 Int를 반환하는 모든 함수일 수 있습니다.
- waterFilter에 람다를 할당하십시오.
- 람다는 dirty 인수를 2로 나눈 값을 반환합니다.
더 이상 람다 인수의 유형을 지정할 필요가 없습니다. 유형은 유형 유추에 의해 계산됩니다.
Step 2: Create a higher-order function
지금까지 람다에 대한 예제는 대부분 함수처럼 보입니다. 람다의 진정한 힘은 그것들을 사용하여 고차 함수를 만드는 것입니다. 한 함수에 대한 인수는 다른 함수입니다.
1. 고차 함수를 작성하십시오. 다음은 두 가지 인수를 취하는 함수의 기본 예입니다. 첫 번째 인수는 정수입니다. 두 번째 인수는 정수를 가져 와서 정수를 반환하는 함수입니다.
fun updateDirty(dirty: Int, operation: (Int) -> Int): Int {
return operation(dirty)
}
코드 본문은 두 번째 인수로 전달 된 함수를 호출하고 첫 번째 인수를 전달합니다.
2. 이 함수를 호출하려면 정수와 함수를 전달하십시오.
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
println(updateDirty(30, waterFilter))
⇒ 15
전달하는 함수는 람다 일 필요는 없습니다. 대신 일반 명명 된 함수일 수 있습니다. 인수를 일반 함수로 지정하려면 :: 연산자를 사용하십시오. 이런 식으로 Kotlin은 함수 호출을 시도하지 않고 함수 참조를 인수로 전달하고 있음을 알고 있습니다.
3. updateDirty ()에 이름이 지정된 일반 함수를 전달하십시오.
fun increaseDirty( start: Int ) = start + 1
println(updateDirty(15, ::increaseDirty))
⇒ 16
참고 : Kotlin은 기능을 수행하는 모든 매개 변수가 마지막 매개 변수 인 것을 선호합니다.
고차 함수로 작업 할 때 Kotlin은 마지막 매개 변수 호출 구문이라는 특수 구문을 사용하므로 코드를
더욱 간결하게 만들 수 있습니다. 이 경우 함수 매개 변수에 람다를 전달할 수 있지만
람다를 괄호 안에 넣을 필요는 없습니다.
var dirtyLevel = 19;
dirtyLevel = updateDirty(dirtyLevel) { dirtyLevel -> dirtyLevel + 23}
println(dirtyLevel)
⇒ 42
'개발 > Kotlin' 카테고리의 다른 글
class와 data class의 차이 (0) | 2019.11.13 |
---|---|
(Kotlin) 함수를 인자로 넘겨서 실행 (0) | 2019.10.16 |
Kotlin Bootcamp for Programmers 7. default values and compact functions (0) | 2019.10.04 |
Kotlin Bootcamp for Programmers 6. 함수 사용 (0) | 2019.10.04 |
Kotlin Bootcamp for Programmers 5. 왜 (거의) 모든 것들은 value를 가지고 있을까? (0) | 2019.10.04 |