val array = arrayOf(1, 2, 3)
for(i in array.indices) {
println("${i} - ${array[i]}")
}
for((index, value) in array.withIndex()) {
println("${index} - ${value}")
}
콜렉션 객체는 초기화할 때 타입을 명시해야 함
불변 콜렉션
가변 콜렉션
val map = mutableMapOf<Int, String>()
map[1] = "a"
map[2] = "b"
mapOf(1 to "a", 2 to "b")
fun String.lastChar(): Char {
return this.charAt(this.length() - 1)
}
fun Int.add(other: Int): Int {
return this + other
}
infix fun Int.add2(other: Int): Int {
return this + other
}
1.add(2) //3
1.add2(2) //3
1 add2 2 //3
//컴파일 시 함수 내부의 코드가 호출된 지점에 그대로 복사됨
//함수 호출에 의한 오버헤드 저감 목적
inline fun Int.add3(other: Int): Int {
return this + other
}
val isApple: (Fruit) -> Boolean = { fruit: Fruit -> fruit.name == "사과" }
fun filterFruit(fruits: List<Fruit>, filter: (Fruit) -> Boolean): List<Fruit> {
val results = mutableListOf<Fruit>()
for(fruit in fruits) {
if(filter.invoke(fruit)) {
results.add(fruit)
}
}
return results
}
filterFruits(fruits, isApple)
filterFruits(fruits) {
//return을 명시하지 않아도 마지막 줄의 결과를 자동 반환
//여러 줄을 입력할 때 중괄호 필수 아님
it.name == 사과 //it 키워드로 입력된 람다 파라미터 자체를 지칭
}
typealias
키워드를 통해 별칭 지정 가능typealias FruitFilter = (fruit) -> Boolean
fun fruitFilter(frutis: List<Fruit>, filter: FruitFilter): List<Fruit> {
}
as
키워드로 별칭을 지정해줘야 함componentN
키워드를 이름으로 하는 함수 재정의 가능val person = Person()
val name = person.name
val age = person.age
val (name, age) = Person()
//val (age, name) = Person() //age 변수에 원본 클래스의 name 값이 할당 됨
it | this | |
---|---|---|
람다의 결과를 반환 | let | run |
객체 자체를 반환 | also | apply |
fun print(person: Person?) {
person?.let {
println(it.name)
println(it.age)
}
}
person.let {
it.age
}
person.run {
this.age
}
person.also {
it.age
}
person.apply {
this.age
}
with(person) { //with(객체, 람다 함수)
println(this.name)
println(age)
}