kotlin的方言(語法糖)

概述

以前介紹了kotlin的快速入門,http://www.cnblogs.com/lizo/p/7231167.html 大多數仍是參照java。kotlin中提供了更多更方便的語言特性html

這個方言實際上是針對java而言,由於不少用法其實在其餘語言裏面是已經存在的。使用kotlin的這些方言可以在必定程度上提升你的開發效率java

POJO類

在kotlin中定義class時候加上關鍵字data便可建立函數

//注意聲明對象的成員變量的是加上val關鍵字 data class Persion(val name: String, val age: Int)

這種對象包含的方法有this

  • getter和setter方法
  • equals()
  • hashCode()
  • toString()
  • copy()
  • 組成方法

組成方法

組成方法就是能夠快速獲取data對象方法,例如
編碼

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();
}

遍歷list/map

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這個區間內

只讀map和list

val list = listOf("a", "b", "c")
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

訪問map元素

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處理

在編碼過程當中不少地方都用到了對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()
}
相關文章
相關標籤/搜索