Derping.with
{ Kotlin }
// JVM
// Android
// JavaScript
// LLVM
// Actually has libraries
// Actually has tooling
// Actually has traction
// Variables
val name = "Ross"
var age = 32
val name: String = "Ross"
var age: Int = 32
val name = "Ross"
var age = 32
// Functions
fun answer(): Int {
return 42
}
fun answer(): Int = 42
fun answer() = 42
fun answer(): Int {
return 42
}
// Parameters
fun greet(name: String): String {
return "Hello " + name
}
// String Interpolation
fun greet(name: String): String {
return "Hello " + name
}
fun greet(name: String): String {
return "Hello $name"
}
// Named Parameters
fun greet(name: String): String {
return "Hello $name"
}
fun greet(name: String,
): String {
return "Hello $name"
}
fun greet(name: String,
greeting: String = "Hello"
): String {
return "Hello $name"
}
fun greet(name: String,
greeting: String = "Hello"
): String {
return "$greeting $name"
}
// Calling a function
greet("Ross")
greet("Ross", greeting="Aloha")
// Classes
class Game()
{
}
class Game()
{
fun join(user: UserName)
{
}
}
val myGame = Game()
// Dependencies
class Game()
{
fun join(user: UserName)
{
}
}
class Game(val logger: Logger)
{
fun join(user: UserName)
{
}
}
class Game(val logger: Logger)
{
fun join(user: UserName)
{
this.logger.log("foo")
}
}
class Game(val logger: Logger)
{
fun join(user: UserName)
{
logger.log("foo")
}
}
class Game(private val logger: Logger)
{
fun join(user: UserName)
{
logger.log("foo")
}
}
// Neat Class Things
// Neato Constructor Options
// Enums
// Sealed Classes
// Delegation
// Properties
data class Name(val first: String, val last: String)
// Null Safety
fun greet(name: String): String {
return "Hello $name"
}
fun greet(name: String?): String {
return "Hello $name"
}
fun greet(name: String?): String {
return "Hello $name"
}
“Hello Ross”
fun greet(name: String?): String {
return "Hello $name"
}
“Hello null”
fun greet(name: String?): String {
return "Hello $name"
}
fun greet(name: String?): String {
return "Hello ${name.toUpperCase()}"
}
fun greet(name: String?): String {
return "Hello ${name.toUpperCase()}"
}
fun greet(name: String?): String {
return "Hello $name"
}
fun greet(name: String?): String {
if (name == null) {
return "STRANGER DANGER"
}
return "Hello $name"
}
fun greet(name: String?): String {
return "Hello $name"
}
fun greet(name: String?): String {
return "Hello ${formatName(name)}"
}
fun formatName(name: String): String {
return name.toUpperCase();
}
fun greet(name: String?): String {
return "Hello ${formatName(name)}"
}
fun formatName(name: String): String {
return name.toUpperCase();
}
fun greet(name: String?): String {
return "Hello ${formatName(name)}"
}
fun formatName(name: String): String {
return name.toUpperCase();
}
address?.postCode()?.suffix()
age ?: 29
// Java Interop
import myutils.tableflip
import java.time.LocalDate
val now = LocalDate.now()
//Extension Functions
fun BoardGame.tableFlip(): String {
return "(ノ°Д° ︵)ノ ┻━┻"
}
val game = BoardGame()
game.tableFlip()
fun BoardGame.tableFlip(): String {
return "(ノ°Д° ︵)ノ ┻━┻"
}
val game = BoardGame()
game.tableFlip()
import nerdstuff.BoardGame
import myutils.tableflip
import java.time.LocalDate
fun LocalDate.yesterday(): LocalDate {
return minusDays(1)
}
val now = LocalDate.now()
val yesterday = now.yesterday()
// Collections
val nums = listOf(1, 2, 3)
nums.map( )
val nums = listOf(1, 2, 3)
nums.map({x: Int -> x * 2})
nums.map({x -> x * 2})
nums.map() {x -> x * 2}
nums.map {x -> x * 2}
nums.map { it * 2 }
// DSLs
routing {
get("/") {
call.respondText("Hello, world!")
}
post("/register") {
// do stuff
}
}
val routing = RoutingBuilder()
routing.get(
{call: Call ->
call.respondText("Hello World!")
}
)
routing.post(/* do stuff */)
html {
head {
title { +"Demo" }
}
body {
h1 { +"Welcome!" }
a(href="/FAQ") { +"FAQ" }
}
}
// Kotlin & Me & You
// Thanks
// @rosstuck
// me@rosstuck.com

Derping With Kotlin