$30 off During Our Annual Pro Sale. View Details »

Productivity by a thousand cuts: The Kotlin Way

Productivity by a thousand cuts: The Kotlin Way

David Denton

October 15, 2020
Tweet

More Decks by David Denton

Other Decks in Programming

Transcript

  1. THE KOTLIN WAY
    PRODUCTIVITY BY A THOUSAND CUTS…
    [email protected]
    @daviddenton

    View Slide

  2. WHO THE HELL IS THIS GUY?
    HI, I’M DAVID

    View Slide

  3. WHO THE HELL IS THIS GUY?
    HI, I’M DAVID
    ENGINEERING LEAD

    View Slide

  4. WHO THE HELL IS THIS GUY?
    HI, I’M DAVID
    ENGINEERING LEAD
    OPEN SOURCE

    View Slide

  5. WHO THE HELL IS THIS GUY?
    HI, I’M DAVID
    ENGINEERING LEAD
    OPEN SOURCE
    SPEAKER

    View Slide

  6. WHO THE HELL IS THIS GUY?
    HI, I’M DAVID
    ENGINEERING LEAD
    OPEN SOURCE
    SPEAKER
    TRAINER

    View Slide

  7. INTO THE MELTING POT
    “GOOD ARTISTS BORROW.
    GREAT ARTISTS STEAL.”
    - PABLO PICASSO

    View Slide

  8. - PABLO PICASSO
    INTO THE MELTING POT
    “GOOD ARTISTS BORROW.
    GREAT ARTISTS STEAL.”
    - TS ELIOT

    View Slide

  9. - PABLO PICASSO
    INTO THE MELTING POT
    “GOOD ARTISTS BORROW.
    GREAT ARTISTS STEAL.”
    - TS ELIOT
    “IMMATURE POETS IMITATE;
    MATURE POETS STEAL.”

    View Slide

  10. INTO THE MELTING POT
    “GOOD LANGUAGES BORROW.
    GREAT LANGUAGES STEAL.”
    - ME, ABOUT KOTLIN

    View Slide

  11. INTO THE MELTING POT

    View Slide

  12. val myValue: Int = null
    operation(myValue.toString())
    FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    1. NULL SAFETY
    ▸ Nulls: The Billion Dollar Mistake
    ▸ Kotlin builds null safety into the type system
    ▸ Hard to subvert it in your own code

    View Slide

  13. val myValue: Int = null
    operation(myValue.toString())
    val myValue: Int = null
    operation(myValue.toString())
    val myValue: Int? = null
    operation(myValue?.toString() ?: “default”)
    FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    1. NULL SAFETY
    ▸ Nulls: The Billion Dollar Mistake
    ▸ Kotlin builds null safety into the type system
    ▸ Hard to subvert it in your own code

    View Slide

  14. fun File.readText() = InputStreamReader(
    FileInputStream(this))
    .use { StringWriter()
    .apply { it.copyTo(this)}.toString() }
    val text = File("content").readText()
    FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    2. EXTENSION FUNCTIONS
    ▸ Extend types you don’t own! (And ones you do!)

    View Slide

  15. fun File.readText() = InputStreamReader(
    FileInputStream(this))
    .use { StringWriter()
    .apply { it.copyTo(this)}.toString() }
    val text = File("content").readText()
    fun File.readText() = InputStreamReader(
    FileInputStream(this))
    .use { StringWriter()
    .apply { it.copyTo(this)}.toString() }
    val text = File("content").readText()
    FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    2. EXTENSION FUNCTIONS
    ▸ Extend types you don’t own! (And ones you do!)

    View Slide

  16. FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    3. SENSIBLE CONCISENESS
    ▸ Immutable by default
    ▸ Type inference
    ▸ Data classes
    ▸ Trailing Lambdas
    ▸ Infix functions & Operators
    ▸ DSLs
    fun ChatApp(): PolyHandler {
    val userCounter = AtomicInteger()
    val messages = mutableListOf()
    val participants = ConcurrentHashMap()
    fun addMessage(new: String) {
    messages.add(new)
    participants.values.forEach { it.send(WsMessage(new)) }
    }
    fun newConnection(ws: Websocket) {
    val id = "user${userCounter.incrementAndGet()}"
    participants += id to ws
    messages.map(::WsMessage).forEach { ws.send(it) }
    addMessage("$id joined")
    ws.onMessage { addMessage("$id: ${it.bodyString()}") }
    ws.onClose {
    participants -= id
    addMessage("$id left")
    }
    }
    val http = BasicAuth("http4k",
    Credentials("kotlin", “isgreat"))
    .then(static(Classpath()))
    val ws = websockets("/ws" bind ::newConnection)
    return PolyHandler(http, ws)
    }
    fun main() {
    ChatApp().asServer(Jetty(5000)).start()
    }

    View Slide

  17. FIVE THINGS YOU’LL LOVE ABOUT KOTLIN
    4. KOTLIN EVERYWHERE!

    View Slide

  18. FIVE THINGS ABOUT KOTLIN YOU’LL LOVE
    5. THE 100S OF OTHER THINGS, INCLUDING…
    ▸ Really easy to learn
    ▸ Idea automatically converts Java to Kotlin!
    ▸ Awesome standard library
    ▸ Language is Open Source
    ▸ Seamless Java Interop
    ▸ Friendly community
    ▸ Both Developers and OSS maintainers absolutely love Kotlin!

    View Slide

  19. ONE THING ABOUT KOTLIN YOU’LL HATE
    1. A WARNING
    YOU MAY NOT WANT TO GO BACK

    View Slide

  20. FIN
    #thanks!
    [email protected]
    @daviddenton

    View Slide