import kotlin.math.* data class Example( val name: String, val numbers: List ) fun interface JokeInterface { fun isFunny(): Boolean } abstract class AbstractJoke : JokeInterface { override fun isFunny() = false abstract fun content(): String } class Joke : AbstractJoke() { override fun isFunny(): Boolean { return true } override fun content(): String = "content of joke here, haha" } class DelegatedJoke(val joke: Joke) : JokeInterface by joke { val number: Long = 123L companion object { const val someConstant = "some constant text" } } object SomeSingleton sealed class Shape { abstract fun area(): Double } data class Square(val sideLength: Double) : Shape() { override fun area(): Double = sideLength.pow(2) } object Point : Shape() { override fun area() = .0 } class Circle(val radius: Double) : Shape() { override fun area(): Double { return PI * radius * radius } } fun String.extensionMethod() = "test" fun main() { val name = """ multiline string some numbers: 123123 42 """.trimIndent() val example = Example(name = name, numbers = listOf(512, 42, null, -1)) example.numbers .filterNotNull() .forEach { println(it) } setOf(Joke(), DelegatedJoke(Joke()).joke) .filter(JokeInterface::isFunny) .map(AbstractJoke::content) .forEachIndexed { index: Int, joke -> println("I heard a funny joke(#${index + 1}): $joke") } listOf(Square(12.3), Point, Circle(5.2)) .associateWith(Shape::area) .toList() .sortedBy { it.second } .forEach { println("${it.first}: ${it.second}") } println("some string".extensionMethod()) require(SomeSingleton::class.simpleName == "SomeSingletonName") { "something does not seem right..." } }