1. 程式人生 > >android kotlin基礎(一)

android kotlin基礎(一)

雖然已經用kotlin寫了兩個專案了,但還是在空閒的時刻,看了一下官網API關於kotlin的資料加深印象,重新穩固一下,從零到還能知道怎麼應用,複習一下,之前寫的有什麼問題,廢話不多說了,開始吧(備註,很多的東西都是根據翻譯的東西而來)

語句和表示式:

fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

>>> println(max(1, 2))

kotlin的方法都是從fun 開始的java是先定義修飾詞,再定義變數,而kotlin是先定義變數再定義修飾詞(中間加了冒號!)java無返回值是void 而kotlin什麼都不用寫,java有返回值就把void改下就好,而kotlin只需在括號後面加需要返回的型別(也是加了冒號)

再看看 if (a> b) a else b 這個就是java的一般if {}else{}嘛 ,而kotlin卻是一個三目運算,比較

java中的語法
條件判斷語句 ? "結果為true" : "結果為false";
kotlin中的語法
if(條件判斷語句) "結果為true" else "結果為false"

有點奇怪,,不過沒法,只好記住了。

變數

在Java中,可以使用型別啟動變數宣告。這不適用於Kotlin,因為它允許您從許多變數宣告中省略型別。因此,在Kotlin中,以關鍵字開頭,您可以(或不)將型別放在變數名稱之後。

val a = "a"

val a: String? =null

lateinit var a:String

而lateinit var a:Int //會出現報錯問題(lateinit不能與基本型別一起使用)

lateinit:

1.修飾的變數與屬性不能是原始資料型別 

2.會被初始化很多次

3.lateinit只能與var 一起連用

講到這裡必須得講var 和val 

var 修飾的可變 可以重新分配一個值,與java宣告變數一樣

var 修飾的不可變 與java final一樣,建立的時候必須初始化,並且以後的值不可改變。

接著上面第二定義的string有個 val a: String?= null  有個?表示,這個變數可為null,kotlin在這裡處理了一下,相比java提前做了null處理,講到這裡不得不將(!!),雙歎號,表示該修飾的型別不能為null, 加入服務端,給你這個字串傳了一個null

o(* ̄︶ ̄*)o呵呵,,你懂的

結果就知道了,有些時候用到kotlin會覺得奇怪,為什麼定義了var ss?= null ,後面用到這個變數的時候,必須要加!!,不然編譯不通過,就如剛剛說的,這個時候如果服務端傳個null,不就爆了,我這裡有兩個方法,,

1.用lateinit,先初始化,不用空判斷,但要慎用,也會出問題,

2.提前判null就好了。(if ss == null)return 

更簡單的字串模版

package ch02.ex1_4_1_StringTemplates

fun main(args: Array<String>) {
    val name = if (args.size > 0) args[0] else "Kotlin"
    println("Hello, $name!")
}

在字串裡面新增一個${}大括號裡面顯示資料,免去了一個+號或者多個使用+問題 甚至可以在裡做判斷

fun main(args: Array<String>) {
    println("Hello, ${if (args.size > 0) args[0] else "someone"}!")
}

類和屬性

用過java的都知道是面向物件程式設計:

/* Java */
public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

kotlin中

class Person(val name: String)

就這麼簡單,java有快速生成類工具,那麼kotlin肯定也有了在setting->plugins -> Install plugin from 輸入Kotlin data 可以看到Generate kotlin data class from JSON 安裝就行了。但會自動生成data class()這種,這個data 是什麼意思呢?

data class就是一個類中只包含一些資料欄位,類似於vo,pojo,java bean。一般而言,我們在Java中定義了這個資料類之後要重寫一下toString,equals等方法。要生成get,set方法。

然而在Kotlin中這些都不在需要自己手動去敲了,編譯器在背後默默給我們生成了如下的東西

  • equals()/hashCode()
  • toString()方法
  • componentN()方法
  • copy()方法

也可以去掉data ,因為kotlin自動get、set了。

區間 ..

區間是以兩個點點表示。

for (i in 1..5) print(i) // 輸出“1235” // 等同於 1 <= i && i <= 5
// 使用 step 指定步長
for (i in 1..4 step 2) print(i) // 輸出“13”

for (i in 4 downTo 1 step 2) print(i) // 輸出“42”


// 使用 until 函式排除結束元素
for (i in 1 until 10) {   // i in [1, 10) 排除了 10
     println(i)
}