Jump Expression
- return // 값을 반환
- break // 루틴을 빠져나갈 때
- continue // 특정 조건에서만 처리하지 않을 때
Labels 정의
loop@ for (i in 1..100) {
// ...
}
-> label을 정의할 때는 name@
-> label을 사용할 때는 @name
Break and Continue Labels
for (i in 1.. 100) {
for (j in 1.. 100) {
if (j > 10) break
print( j )
}
println()
}
println("end")
-> label 추가
for (i in 1..100) {
loop@ for (j in 1..100) {
if (j > 10) break@loop
print(j)
}
println()
}
println("end")
// 12345678910 - 100번 찍히고 end
loop@ for (i in 1..100) {
for (j in 1..100) {
if (j>10) break@loop
print(j)
}
println()
}
println("end")
// 12345678910end
Return at Labels
fun foo() {
val ints = mutableListOf (1, 2, 0, 4. 5)
ints.forEach {
if (it ==0) return // nonlocal return from inside lambda directly to the caller of foo()
print(it)
}
}
// 1, 2 출력
val ints = mutableListOf (1, 2, 0, 4. 5)
fun foo() {
ints.forEach lit@ {
if (it == 0) return@lit
print(it)
}
}
// 1, 2, 4, 5 출력
fun foo() {
val ints = mutableListOf (1, 2, 0, 4. 5)
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
// 1, 2, 4, 5 출력
Return
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
message.setText(R.string.title_home)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
message.setText(R.string.title_dashboard)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
message.setText(R.string.title_notifications)
return@OnNavigationItemSelectedListener true
}
}
false
}
// 람다식은 맨마지막 줄이 리턴 되기 때문에 중간에 리턴값을 나타내고 싶으면 return + @{람다식 리스너 이름} 꼭 표시해줘야됨!!
This expression
class Sample {
val temp = this@Sample // class 자체를 가지게 됨
val temp1 = this
}
// temp, temp1 동일한 결과 가지게 됨!!
class Sample {
fun Int.foo() {
val a = this@Sample // Sample class 자체를 가리킴
val b = this // foo 내부의 Int 를 가리킴
val c = this@foo
println("b === c ${b === c}")
}
fun test (a : Int ){
a.foo()
}
}
class Sample {
inner class SampleB {
fun Int.foo() {
val a = this@Sample
val a1 = this@SampleB
test() // inner 클래스 안에 있는 test() 호출
this@Sample.test() // inner 클래스 안에서 밖에 있는 test() 호출
val b = this
val b1 = this@foo
println("b === b1 ${b === b1}")
}
fun test(a : Int) {
a.foo()
}
fun test() {
println("test - inner class SampleB")
}
}
fun test() {
println("test - class Sample")
}
}
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Null 예외처리 (0) | 2019.07.11 |
---|---|
[Kotlin] Null 처리 방법 (0) | 2019.07.11 |
[Kotlin] Lambda (0) | 2019.07.11 |
[Kotlin] Control Flow - if/when/loops (0) | 2019.07.11 |
[Kotlin] Function (0) | 2019.07.11 |