fun filterFruits(fruits: List<Fruit>, filter: (Fruit) -> Boolean) {
}
// 아래처럼 타입에 별칭을 부여할 수 있다.
typealias FruitFilter = (Fruit) -> Boolean
fun filterFruits(fruits: List<Fruit>, filter: FruitFilter) {
}
// 람다 뿐만 아니라 너무 길어 줄이고 싶은 어느 타입에도 사용할 수 있다.
data class UltraSuperGuardianTribe(val name: String)
typealias USGTMap = Map<String, UltraSuperGuardianTribe>
as
키워드로 별칭을 부여할 수 있다.Import
와 동시에 이름을 바꿀 수 있다.import com.lannstark.lec19.a.printHelloWorld as printHelloworldA
import com.lannstark.lec19.b.printHelloWorld as printHelloworldB
fun main() {
printHelloWorldA()
printHelloWorldB()
}
data class Person(
val name: String,
val age: Int
)
val person = Person("이동규", 100)
val (name, age) = person
data class
는 componentN이란 함수도 자동으로 만들어 준다.val person = Person("이동규", 100)
val name = person.component1() // 1번째 프로퍼티
val age = person.component2() // 2번째 프로퍼티
data class
가 아닌데 구조 분해를 사용하고 싶다면 componentN 함수를 직접 구현하면 된다.class Person(
val name: String,
val age: Int
) {
operator fun component1(): String {
return this.name
}
operator fun component2(): String {
return this.age
}
}
break
, continue
등의 루프 제어 구문은 자바와 코틀린에서 똑같이 사용할 수 있다.forEach { }
구문에서는 break
, continue
등 기능을 사용할 수 없다.val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { number ->
if (number == 3) continue // 에러
}
break
와 continue
를 forEach
문과 쓰고 싶다면?val numbers = listOf(1, 2, 3, 4, 5)
run { // run으로 감싸야 함
numbers.forEach { number ->
if (number == 3)
return@run // break
}
}
println(number)
}
numbers.forEach {
println(it)
if (it == 3) {
return@forEach // continue
}
}
break
, continue
, return
등을 사용하는 기능
loop@ for (i in 1..100) {
for (j in 1..100) {
if (j == 2) {
break@loop // loop 라벨이 표시된 제일 첫 반복문을 멈춘다.
}
}
}
val numbers = listOf(1, 2, 3, 4, 5)
run {
numbers.forEach { number ->
if (number == 3)
return@run // run 구문을 리턴시킴으로써 break 같은 효과를 냄
}
}
println(number)
}
takeIf
- 주어진 조건을 만족하믄 그 값이, 그렇지 않으면 null
이 반환된다.fun getNumberOrNull(): Int? {
return if (number <= 0) {
null
} else {
number
}
}
// 위 함수를 takeIf를 사용하면 아래처럼 바꿀 수 있다.
fun getNumberOrNull(): Int? {
return number.takeIf { it > 0 }
}
takeUnless
- 주어진 조건을 만족하지 않으면 그 값이, 그렇지 않으면 null
이 반환된다.fun getNumberOrNull(): Int? {
return number. takeUnless{ it <= 0 }
}