interface ClickListener {
fun onClick()
}
fun main() {
val clickListener = object : ClickListener {
override fun onClick() {
}
}
}
enum class Color {
RED,
GREEN,
BLUE
}
val colorCode = when (color) {
Color.RED -> "#FF0000",
Color.GREEN -> "#00FF00"
Color.BLUE -> "#0000FF"
}
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
}
abstract fun signal(): ProtocalState
}
동등성 비교
- Structural equality ==, !=
- 값을 비교한다
- equals와 동일하다
- Referential equality ===, !==
- 주소값을 비교한다
(parameter) → return typeval isEven: (Int) -> Boolean = {
it % 2 == 0
}
(receiver type).(parameter) → return typeval isOdd: Int.() -> Boolean = {
this % 2 != 0
}
val repeatText: String.(Int) -> String = {
this.repeat(it)
}
val repeatText: String.(times: Int) -> String = { times ->
this.repeat(times)
}
println(isEven(5))
println(isOdd(5))
println(repeatText("a", 3))
println(5.isOdd())
println("a".repeatText(3))
fun <T> Iterable<T>.filter(
predicate: (T) -> Boolean
): List<T>
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter {
it % 2 == 0
}
fun <T, R> Collection<T>.fold(
initial: R,
combine: (acc: R, nextElement: T) -> R
) : R {
var accumulator: R = initial
for (element: T in this) {
accumulator = combine(accumulator, element)
}
return accumulator
}
var user: User? = null
val welcomeMessage = run {
if (user == null) {
"앱을 사용하려면 로그인을 해주세요"
} else {
"${user.name} 님, 환영합니다!"
}
}
inline fun <T, R> T.let(block: (T) -> R): R
inline fun <T, R> T.run(block: T.() -> R): R
inline fun <R> run(block: () -> R): R
inline fun <T, R> with(receiver: T, block: T.() -> R): R
inline fun <T> T.apply(block: T.() -> Unit): T
inline fun <T> T.also(block: (T) -> Unit): T