以前介紹了kotlin的快速入門,http://www.cnblogs.com/lizo/p/7231167.html 大多數仍是參照java。kotlin中提供了更多更方便的語言特性html
這個方言實際上是針對java而言,由於不少用法其實在其餘語言裏面是已經存在的。使用kotlin的這些方言可以在必定程度上提升你的開發效率java
在kotlin中定義class時候加上關鍵字data便可建立函數
//注意聲明對象的成員變量的是加上val關鍵字 data class Persion(val name: String, val age: Int)
這種對象包含的方法有this
data class Person(val name:String ,val age:Int) fun main(args: Array<String>) { var p = Person("lizo",18); println(p.component1()) //獲取第一個成員變量 println(p.component2()) //獲取第二個成立變量 var (name,age) = p; //把第一個和第二個變量分別賦值給 name 和age ,注意是根據順序,而不是名字 println("name : $name ,age : $age") }
輸出spa
lizo
18
name : lizo ,age : 18code
例如使用一個方法返回多個參數的時候,就能夠使用這個方法component
data class Persion(val name: String, val age: Int) fun someCall():Person{ ... return Person("lizo",18) } val (name,age) = someCall()
在調用某些方法的時候,咱們須要能夠設置一些默認值htm
fun someCall(var1: String, var2: Int, var3: String = "default"){ print("$var1,$var2,$var3") } fun main(args: Array<String>) { someCall("lizo",18) }
在一個方法阿尤多個默認值的時候,能夠選擇性的賦值(但沒有默認值的參數必須傳遞)對象
fun someCall(var1: String = "default1", var2: Int, var3: String = "default2") { print("$var1,$var2,$var3") } fun main(args: Array<String>) { someCall(var2 = 18,var3 = "lizo123") }
利用when的語法,進行實例類型判斷
when(a){ is String -> print(a.length) is Int -> print(a) ... else -> throw RuntimeException(); }
for (l in list) { println("$l") } for ((k, v) in map) { println("$k -> $v") }
for (i in 1..100) { ... } // 閉區間:包含100 for (i in 1 until 100) { ... } // 不包含100 for (x in 2..10 step 2) { ... } // 按照步長爲2增加 for (x in 10 downTo 1) { ... } // if (x in 1..10) { ... } //判斷x是否在1到10這個區間內
val list = listOf("a", "b", "c") val map = mapOf("a" to 1, "b" to 2, "c" to 3)
println(map["key"]) //get map["key"] = value //set
有些屬性咱們但願能夠延遲加載,能夠是用 by lazy屬性(必須是val修飾的變量)
class Clazz() { val p: String by lazy { println("lazy!") "haha" } } fun main(args: Array<String>) { var clazz = Clazz() println(clazz.p) println(clazz.p) }
輸出
lazy!
haha
haha
kotlin中支持對一個類的方法進行擴展
fun String.myToLowerCase(): String { return this.toLowerCase() } fun main(args: Array<String>) { println("tHIs iS TeST".myToLowerCase()) }
輸出
this is test
這樣作的好處就是在咱們須要擴展某個類的方法時候,不用定義一個新的類去擴展,很差的地方一個類的擴展類也許或分佈在多個地方。
在編碼過程當中不少地方都用到了對null處理,kotlin中提供了便捷操做方法去處理
//若是a爲null,則整個a?.length都是null print(a?.length);
若是須要在爲null的狀況下賦值
//當a爲null的時候,b的值爲default var b = a?:"default"
若是須要判斷當a不爲null 到時候進行一些處理
a?.let{ //do some thing a != null }
賦值(=)的時候,能夠直接在後面放入條件語句
var a = if(b > 0){1}else{-1} val c = when (d){ "red" -> 1 "blue" -> 2 else -> throw IllegalArgumentException("Invalid color param value") } } //函數返回 fun someCall(a:Int) = if(a>0){1}else if(){-1}
經過使用with關鍵字,能夠在範圍內直接調用該方法
class Turtle { fun penDown() fun penUp() fun turn(degrees: Double) fun forward(pixels: Double) } val myTurtle = Turtle() with(myTurtle) { //draw a 100 pix square penDown() for(i in 1..4) { forward(100.0) turn(90.0) } penUp() }