- Notifications
You must be signed in to change notification settings - Fork0
A collection of random and frequently used idioms in Kotlin.
NotificationsYou must be signed in to change notification settings
geekonjava/KotlinIdiom
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A collection of random and frequently used idioms in Kotlin. If you have a favorite idiom, contribute it by sending a pull request.
data classCustomer(valname:String,valemail:String)
provides aCustomer
class with the following functionality:
- getters (and setters in case ofvar{: .keyword }s) for all properties
equals()
hashCode()
toString()
copy()
component1()
,component2()
, ..., for all properties (seeData classes)
funfoo(a:Int = 0,b:String = "") {... }
val positives= list.filter { x-> x>0 }
Or alternatively, even shorter:
val positives= list.filter { it>0 }
println("Name$name")
when (x) {isFoo->...isBar->...else->...}
for ((k, v)in map) {println("$k ->$v")}
k
,v
can be called anything.
for (iin1..100) {... }// closed range: includes 100for (iin1 until100) {... }// half-open range: does not include 100for (xin2..10 step2) {... }for (xin10 downTo1) {... }if (xin1..10) {... }
val list=listOf("a","b","c")
val map=mapOf("a" to1,"b" to2,"c" to3)
println(map["key"])map["key"]= value
val p:String by lazy {// compute the string}
fun String.spaceToCamelCase() {... }"Convert this to camelcase".spaceToCamelCase()
object Resource {val name="Name"}
val files=File("Test").listFiles()println(files?.size)
val files=File("Test").listFiles()println(files?.size?:"empty")
val data=...val email= data["email"]?:throwIllegalStateException("Email is missing!")
val data=...data?.let {...// execute this block if not null}
val data=...val mapped= data?.let { transformData(it) }?: defaultValueIfDataIsNull
funtransform(color:String):Int {returnwhen (color) {"Red"->0"Green"->1"Blue"->2else->throwIllegalArgumentException("Invalid color param value") }}
funtest() {val result=try { count() }catch (e:ArithmeticException) {throwIllegalStateException(e) }// Working with result}
funfoo(param:Int) {val result=if (param==1) {"one" }elseif (param==2) {"two" }else {"three" }}
funarrayOfMinusOnes(size:Int):IntArray {returnIntArray(size).apply { fill(-1) }}
funtheAnswer()=42
This is equivalent to
funtheAnswer():Int {return42}
This can be effectively combined with other idioms, leading to shorter code. E.g. with thewhen{: .keyword }-expression:
funtransform(color:String):Int=when (color) {"Red"->0"Green"->1"Blue"->2else->throwIllegalArgumentException("Invalid color param value")}
classTurtle {funpenDown()funpenUp()funturn(degrees:Double)funforward(pixels:Double)}val myTurtle=Turtle()with(myTurtle) {//draw a 100 pix square penDown()for(iin1..4) { forward(100.0) turn(90.0) } penUp()}
val stream=Files.newInputStream(Paths.get("/some/file.txt"))stream.buffered().reader().use { reader->println(reader.readText())}
// public final class Gson {// ...// public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {// ...inlinefun <reifiedT:Any> Gson.fromJson(json:JsonElement):T=this.fromJson(json,T::class.java)
val b:Boolean?=...if (b==true) {...}else {// `b` is false or null}