Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AppBarLayout
- lifecycle
- Algorithm
- DataBinding
- Android
- 안드로이드
- LiveData
- 백준
- kotlin
- activity
- CollapsingToolbarLayout
- hilt
- sqlite
- Coroutine
- onLayout
- ViewModel
- Behavior
- CoordinatorLayout
- Navigation
- room
- 알림
- recyclerview
- notification
- CustomView
- HTTP
- 코틀린
- BOJ
- 알고리즘
- onMeasure
- View
Archives
- Today
- Total
개발일지
Kotlin in A..Z (8) - 람다 본문
- 람다식 형태
{ x:Int, y:Int -> x + y }
- 람다식을 변수에 할당하기
(Int, Int) -> Int 같은 형식으로 람다의 형태를 선언 후 { x:Int, y:Int -> x + y } 같은 형식으로 대입한다.
코드
val lambda1: (Int, Int) -> Int = {x:Int, y:Int -> x + y}
- 람다식 간단히 표현하기
람다의 형태를 선언한 경우 람다의 형태를 표현할 때 자료형을 생략할 수 있다.
val lambda1: (Int, Int) -> Int = {x, y -> x + y}
람다를 대입할 때 사용하지 않는 매개변수가 있을 경우 _로 생략할 수 있다.
val lambda1: (Int, Int) -> Int = { _, y -> y }
람다의 매개변수가 한개일 경우 생략하여 it으로 표기할 수 있다.
val lambda1: (Int) -> Int = { it }
람다의 형태를 선언할 필요 없이 람다를 대입하여 유추할 수 있다.
val lambda1 = {x:Int, y:Int -> x + y}
- 람다 매개변수에 람다 전달하기
코드
fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
return lambda(x, y)
}
fun main() {
println(cal(1, 2, {num1, num2 -> num1 + num2}))
}
결과
3
제일 오른쪽에 있는 람다는 괄호 밖으로 꺼내어 전달할 수 있다.
코드
fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
return lambda(x, y)
}
fun main() {
println(cal(1, 2) {x, y ->
x + y
})
}
결과
3
- 람다 매개변수에 일반 함수 전달하기
:: 키워드를 함수 앞에 붙여서 전달한다
코드
fun sum(x:Int, y:Int): Int {
return x + y
}
fun cal(x:Int, y:Int, lambda: (Int, Int) -> Int): Int {
return lambda(x, y)
}
fun main() {
println(cal(1, 2, ::sum))
}
결과
3
- 라벨을 사용하여 값 반환하기
라벨을 이용하여 람다식에 이름을 붙이고 return문을 사용할 수 있다.
코드
fun test(x: Int, y: Int, lambda: (Int, Int) -> Int) {
println(lambda(x, y))
}
fun main() {
test(5, 5) labelLambda@{ x, y ->
var result = x + y
if(result == 10) {
return@labelLambda result*2
}
result *= result
result
}
}
결과
20
- 암묵적 라벨
람다 표현식에 직접 라벨을 붙이는게 아니라 위와같이 함수의 이름을 암묵적으로 람다의 라벨로 사용할 수 있다.
코드
fun test(x: Int, y: Int, lambda: (Int, Int) -> Int) {
println(lambda(x, y))
}
fun main() {
test(5, 5) { x, y ->
var result = x + y
if(result == 10) {
return@test result*2
}
result *= result
result
}
}
결과
20
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (10) - if문 (0) | 2020.07.15 |
---|---|
Kotlin in A..Z (9) - 다양한 함수 (0) | 2020.07.14 |
Kotlin in A..Z (7) - 함수 (0) | 2020.07.11 |
Kotlin in A..Z (6) - 연산자 (0) | 2020.07.10 |
Kotlin in A..Z (5) - 자료형 비교, 검사, 변환 (0) | 2020.07.10 |
Comments