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