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 |
Tags
- notification
- Behavior
- AppBarLayout
- activity
- recyclerview
- 알림
- sqlite
- Algorithm
- onMeasure
- DataBinding
- HTTP
- 코틀린
- CollapsingToolbarLayout
- LiveData
- 안드로이드
- Android
- lifecycle
- 백준
- CoordinatorLayout
- Coroutine
- Navigation
- BOJ
- kotlin
- onLayout
- View
- hilt
- ViewModel
- CustomView
- room
- 알고리즘
Archives
- Today
- Total
개발일지
Kotlin in A..Z - 범위 지정 함수 본문
also
- 해당 객체를 사용하기 전에 데이터의 유효성을 검사할 때 매우 유용하다.
선언
fun <T> T.also(block: (T) -> Unit): T {
block(this)
return this
}
코드
class Animal {
var name: String = "Animal"
var age: Int = 0
override fun toString(): String {
return "Name : $name, Age : $age"
}
}
fun isDog(animal: Animal) {
assert(animal.name == "Dog")
}
fun main() {
val dog = Animal().also {
isDog(it)
}
}
apply
- 특정 객체를 생성하면서 동시에 초기화를 할 때 사용한다.
- 객체가 반복되면서 사용될 때 코드의 양을 줄일 수 있다.
선언
inline fun <T> T.apply(block: T.() -> Unit): T
코드
class Animal {
lateinit var name: String
var age: Int = 0
override fun toString(): String {
return "Name : $name, Age : $age"
}
}
fun main() {
val animal = Animal().apply {
name = "Dog"
age = 5
}
println(animal)
}
결과
Name : Dog, Age : 5
let
- 해당 객체가 null이 아닐 경우에만 실행하고 싶은 경우
- 블록 단위의 변수를 사용하고 싶은 경우
- 블록의 값을 반환한다.
선언
inline fun <T, R> T.let(block: (T) -> R): R {
return block(this)
}
코드
class Animal {
var name: String = "Animal"
var age: Int = 0
override fun toString(): String {
return "Name : $name, Age : $age"
}
}
fun main() {
var nullAnimal : Animal? = null
nullAnimal?.let {
println(it)
}
var animal = Animal()
var returnValue = animal.let {
println(it)
5
}
println(returnValue)
}
결과
Name : Animal, Age : 0
5
run
- 블록단위 반환값을 가진다
- 블록 단위의 변수가 필요할 경우
- 이미 생성된 객체의 메서드나 프로퍼티를 연속으로 호출할 때
선언
inline fun <R> run(block: () -> R): R
inline fun <T, R> T.run(block: T.() -> R): R
코드
class Animal {
var name: String = "Animal"
var age: Int = 0
override fun toString(): String {
return "Name : $name, Age : $age"
}
}
fun main() {
var add = run {
val a = 2
val b = 3
a + b
}
println(add)
var animal = Animal().apply {
name = "Hello"
age = 15
}
var result = animal.run {
println("Info : $this")
println("Name : $name")
println("Age : $age")
true
}
println(result)
}
결과
5
Info : Name : Hello, Age : 15
Name : Hello
Age : 15
true
with
- run과 비슷하지만 반환값이 없다.
선언
inline fun <T, R> with(receiver: T, block: T.() -> R): R
코드
class Animal {
var name: String = "Animal"
var age: Int = 0
override fun toString(): String {
return "Name : $name, Age : $age"
}
}
fun main() {
val animal = Animal()
with(animal) {
println("Name : $name")
println("Age : $age")
}
}
Name : Animal
Age : 0
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z - Coroutine(2) 기본 (0) | 2020.10.15 |
---|---|
Kotlin in A..Z - Coroutine(1) 개념 (0) | 2020.10.08 |
Kotlin in A..Z - Array (0) | 2020.07.21 |
Kotlin in A..Z (27) - reified (0) | 2020.07.19 |
Kotlin in A..Z (26) - 상, 하위 형식의 가변성 (0) | 2020.07.19 |
Comments