Kotlin is a new and quite exciting language for both mobile and backend development. It has many nifty constructs. This is my Kotlin features sheet cheat that I will use whenever I need to switch from another language and to Kotlin. Maybe it can help you too 🙂
// Let's start with a HelloWorld example
println("Hello Kotlin!")
Variables
// Immutable variables (only getters are provided)
val readonly = 10
// Mutable variables (getters and setters are provided)
var mutable = "Hello"
mutable = "Hello again"
// Explicit typing
val student: Student = Student
val year: Int = 49
// Implicit typing
val student = Student
val year = 42
// Variable destruction
val (model, color, price) = car
println("I have a $color $model that set me back $price SEK")
// Ex. "I have a red S60 that set me back 250 000 SEK"
String concatenation
// 'In string' concatenation
println("My daughter is $readonly years of age")
// Ex. "My daughter is 10 yeas of age"
// 'In string' concatenation with string functions
println("In ten years my daughter will be ${readonly.plus(10)}")
// Ex. "In ten years my daughter will be 20"
Switch statement
// Kotlin switch
var x = 23
when (x) {
in 1..10 -> println("x is between 1 and 10")
!in 10..20 -> println("x is not between 1 and 10")
else -> println("default branch")
}
NULL
// Mark variables that can be null
val name: String = "Niklas"
var work: String? = "Goverment"
name = null // NOT allowed
work = null // Allowed
Spread operator
// Spread operator
val subscriptions = arrayOf("subscription a", "subscription b")
val hardware = arrayOf("iPhone 12", "iPhone X")
val shoppingCart = arrayOf(*subscriptions, *hardware)
// shoppingCart:
// ["subscription a", "subscription b", "iPhone 12", "iPhone X"]
Range
// Range operator
for (x in 1..10) {
println(x)
}
// 12345678910
Pair
// Pair object
val hands = "Left" to "Right"
println(hands.first) // "Left"
println(hands.second) // "Right"
Check variable type
val model = "Volvo"
val price = 123000.50
val cars: List<any> = listOf(model, price)
for(car in cars) {
when (car) {
is String -> {
println("Model: $car")
}
is Double -> {
println("Price: $car")
}
else -> {
println("Not an attribute")
}
}
}
Short function syntax
fun sum(a: Int, b: Int) = a + b
println(sum(2, 4)) // 6
Default arguments
fun printWO(productId: Int, amount: Int = 1, by: String = "mail") {
println("$amount of $productId by $by")
}
printWO(123456) // "1 of 123456 by mail"
printWO(123456, 10) // "10 of 123456 by mail"
printWO(123456, 10, "DHL") // "10 of 123456 by DHL"
Data class
data class Phone(var model: Int, val color: String)
val phone = Phone(123456, "Purple")
println(phone) // Phone(model=123456, color=Purple) - toString()
println(phone.model) // 123456 - Built in getters
phone.color = "Blue" // Built in setter
println(phone) // Phone(model=123456, color=Blue)
val (model, color) = phone // Destructuring data classes
Singelton
object MySingletonClass {
init {
println("Hello World!")
}
var name = "I a Singelton"
fun printName(){
println(name)
}
}
fun main() {
MySingletonClass.printName() // "I a Singelton"
}