sudo README

Posts


No results for 'undefined'

Notes


No results for 'undefined'

Kotlin: First Impressions

March 03, 2020

I played around with Kotlin recently and was pretty impressed. It seems like they took the best parts of C#, Scala, and Go. Here’s a quick rundown of some features.

  • Expression bodied functions

    fun sum(a: Int, b: Int) = a + b
  • Immutable variables with type inference

    val b = 2
  • String templates

    val s2 = "${s1.replace("is", "was")}, but now is $a"
  • Type checks and automatic casts

    if (obj is String && obj.length > 0) // obj casted to a string
  • Pattern matching,

    when (obj) {
    1 -> "One"
    "Hello" -> "Greeting"
    is Long -> "Long"
    !is String -> "Not a string"
    else -> "Unknown"
    }
  • Ranges

    for (x in 1..5) ...
  • Immutable collections with lambdas

    val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
    fruits
    .filter { it.startsWith("a") }
    .sortedBy { it }
    .map { it.toUpperCase() }
    .forEach { println(it) }
  • DTOs with equals, copy, toString; can be created without new

    data class Customer(val name: String, val email: String)
  • Default parameter values

    fun foo(a: Int = 0, b: String = "")
  • Extension functions

    fun String.spaceToCamelCase() { ... }
    "Convert this to camelCase".spaceToCamelCase()
    Singletons,
    object Resource {
    val name = "Name"
    }
  • Elvis operator aka “if not null” shorthand

    println(files?.size)
  • “If not null and else” shorthand

    println(files?.size ?: "empty")
  • Get item of possibly empty list

    emails.firstOrNull() ?: ""
  • if expressions

    val result = if (param == 1) "one" else "other"
  • Nullables without the .Get and .HasValue in C#

    val b: Boolean? = ...
    if (b == true) { ... } else { /* b is false or null */ }
  • The main Go influence seems to be coroutines (lightweight threads) for async code. They also reminded me of C#‘s async/await, here’s a good explanation.


Rocky Warren's blog.

Principal Engineer and Architect at Vertex. I do other stuff too.

PhotosResumeNotes