templates/inc/pages/index/code-examples.html (137 lines of code) (raw):

<section class="kotlin-code-examples-section kto-overview-section kto-overview-section_mode_dark" id="try-kotlin-examples"> <div class="g-layout"> <div class="kotlin-overview-code-example-tabs"> <div class="kotlin-overview-code-example-tabs__group"> <div class="overview-group"> <div class="tab is_active js-tab" data-tab-id="kotlin-code-example-simple"> <div class="text">Simple</div> </div> <div class="tab js-tab" data-tab-id="kotlin-code-example-object-asynchronous"> <div class="tab-text">Asynchronous</div> </div> <div class="tab js-tab" data-tab-id="kotlin-code-example-oriented"> <div class="tab-text">Object-oriented</div> </div> <div class="tab js-tab" data-tab-id="kotlin-code-example-functional"> <div class="tab-text">Functional</div> </div> <div class="tab js-tab" data-tab-id="kotlin-code-example-tests"> <div class="tab-text">Ideal for tests</div> </div> </div> <button type="button" class="kotlin-code-examples-section__run">Run</button> </div> <!-- code example --> <div class="kotlin-overview-code-example" id="kotlin-code-example-simple"> <pre theme="darcula" class="sample" data-mobile-shorter-height="400" auto-indent="false" data-min-compiler-version="1.5"> fun main() { val name = "stranger" // Declare your first variable println("Hi, $name!") // ...and use it! print("Current count:") for (i in 0..10) { // Loop over a range from 0 to 10 print(" $i") } }</pre> </div> <!-- code example --> <div class="kotlin-overview-code-example is_hidden" id="kotlin-code-example-object-asynchronous"> <pre theme="darcula" class="sample" data-mobile-shorter-height="400" auto-indent="false" data-min-compiler-version="1.5" args="Kotlin"> import kotlinx.coroutines.* suspend fun main() { // A function that can be suspended and resumed later val start = System.currentTimeMillis() coroutineScope { // Create a scope for starting coroutines for (i in 1..10) { launch { // Start 10 concurrent tasks delay(3000L - i * 300) // Pause their execution log(start, "Countdown: $i") } } } // Execution continues when all coroutines in the scope have finished log(start, "Liftoff!") } fun log(start: Long, msg: String) { println("$msg " + "(on ${Thread.currentThread().name}) " + "after ${(System.currentTimeMillis() - start)/1000F}s") }</pre> </div> <!-- code example --> <div class="kotlin-overview-code-example is_hidden" id="kotlin-code-example-oriented"> <pre theme="darcula" class="sample" data-mobile-shorter-height="400" auto-indent="false" folded-button="false" data-min-compiler-version="1.5"> abstract class Person(val name: String) { abstract fun greet() } interface FoodConsumer { fun eat() fun pay(amount: Int) = println("Delicious! Here's $amount bucks!") } class RestaurantCustomer(name: String, val dish: String) : Person(name), FoodConsumer { fun order() = println("$dish, please!") override fun eat() = println("*Eats $dish*") override fun greet() = println("It's me, $name.") } fun main() { val sam = RestaurantCustomer("Sam", "Mixed salad") sam.greet() // An implementation of an abstract function sam.order() // A member function sam.eat() // An implementation of an interface function sam.pay(10) // A default implementation in an interface }</pre> </div> <!-- code example --> <div class="kotlin-overview-code-example is_hidden" id="kotlin-code-example-functional"> <pre theme="darcula" class="sample" data-mobile-shorter-height="400" auto-indent="false" data-min-compiler-version="1.5"> fun main() { // Who sent the most messages? val frequentSender = messages .groupBy(Message::sender) .maxByOrNull { (_, messages) -> messages.size } ?.key // Get their names println(frequentSender) // [Ma] // Who are the senders? val senders = messages .asSequence() // Make operations lazy (for a long call chain) .filter { it.body.isNotBlank() && !it.isRead } // Use lambdas... .map(Message::sender) // ...or member references .distinct() .sorted() .toList() // Convert sequence back to a list to get a result println(senders) // [Adam, Ma] } data class Message( // Create a data class val sender: String, val body: String, val isRead: Boolean = false, // Provide a default value for the argument ) val messages = listOf( // Create a list Message("Ma", "Hey! Where are you?"), Message("Adam", "Everything going according to plan today?"), Message("Ma", "Please reply. I've lost you!"), )</pre> </div> <!-- code example --> <div class="kotlin-overview-code-example is_hidden" id="kotlin-code-example-tests"> <pre theme="darcula" class="sample" data-mobile-shorter-height="400" auto-indent="false" data-min-compiler-version="1.5" data-target-platform="junit"> // Tests // The following example works for JVM only import kotlin.test.* class SampleTest { @Test fun `test sum`() { // Write test names with whitespaces in backticks val a = 1 val b = 41 assertEquals(42, sum(a, b), "Wrong result for sum($a, $b)") } @Test fun `test computation`() { assertTrue("Computation failed") { setup() // Use lambda returning the test subject compute() } } } // Sources fun sum(a: Int, b: Int) = a + b fun setup() {} fun compute() = true</pre> </div> <a href="/docs/getting-started.html" class="kto-button kto-button_theme_dark kto-button_size_l kto-button_mode_outline kotlin-overview-code-example-tabs__button _get-started-button">Get started ↗</a> </div> </div> </section>