Kotlin基礎
阿新 • • 發佈:2021-12-13
1.kotlin的簡介
Kotlin是由JetBrains開發的針對JVM、Android和瀏覽器的靜態程式語言,目前,在Apache組織的許可下已經開源。使用Kotlin,開發者可以很方便地開發移動Android應用、伺服器程式和JavaScript程式。Kotlin可以將程式碼編譯成Java位元組碼,也可以編譯成JavaScript,方便在沒有JVM的裝置上執行。
Kotlin來源於一個島嶼的名字,全稱是Kotlin Island,是英語【科特林島】之意,這個小島位於俄羅斯的聖彼得堡附近。之所以要命名為Kotlin,是因為Kotlin的主要開發工作就是由位於聖彼得堡分公司團隊完成的。
2.kotlin的基礎語法
函式定義
函式定義使用關鍵字fun
,引數格式為: 引數:型別
fun sum2(x: Int, y: Int): Int {
return x + y;
}
表示式作為函式體,返回值型別自動推斷
fun sum(x: Int, y: Int) = x + y;
public 方法必須明確返回值型別,否則會報錯
public fun sum3(x: Int, y: Int): Int = x + y;
無返回值的函式(Unit類似於java中的void,但是不等同於void)
fun sum4(x: Int, y: Int): Unit { println(x + y) }
可變長引數函式
函式的變長引數可以用 vararg
關鍵字進行標識, 此時引數是以陣列的形式展示
// 列印引數
fun vararg(vararg variable: String) {
for (vars in variable) {
println(vars)
}
}
lamdba表示式
val list: MutableList<String> = ArrayList() list.add("a") list.add("b") list.add("c") list.add("d") list.forEach( Consumer { l: String -> println(l) } )
定義常量和變數
可變變數定義: 使用var
關鍵字
var 識別符號:型別=初始化值
不可以變數定義: 使用val
關鍵字
val 識別符號:型別=初始化值
常量和變數都可以沒有初始值,但是在引用前必須初始化
編譯器支援自動型別判斷,即宣告時可以不指定型別,由編譯器判斷
/**
* @定義常量和變數
* 可變變數定義: 使用var關鍵字
* 不可以變數定義: 使用val關鍵字
* var 識別符號:型別=初始化值
* val 識別符號:型別=初始化值
*
* 常量和變數都可以沒有初始值,但是在引用前必須初始化
* 編譯器支援自動型別判斷,即宣告時可以不指定型別,由編譯器判斷
*/
var a: Int = 1
var b = 1
println(a)
println(b)//系統會自動推斷變數型別為Int
val c: Int// 初始化時候必須提供變數型別
c = 2// 明確賦值
println(c)
var x = 5
x += 2 // 變數是可以被修改
println(x)
字串模板
$
表示一個變數名或者變數值
$varName
表示變數值
$(varName.fun())
表示變數的方法返回值
/**
* @字串模板
* $ 表示一個變數名或者變數值
* $varName表示變數值
* $(varName.fun())表示變數的方法返回值
*/
// 1.$varName表示變數值
var s = "wangliang";
var s1 = "i am $s";
println(s1) // 打印出 i am wangliang
// 2.$(varName.fun())表示變數的方法返回值
var s2 = "i am ${s.replace("wangliang", "wl")}";
println(s2)
Null檢查機制
Kotlin的空安全設計對於宣告可為空的引數,在使用時要進行空判斷處理,有兩種處理方式:
1.欄位後加!!像Java一樣丟擲空異常
2.另一種欄位後加?可不做處理返回值為 null或配合?:做空判斷處理
/**
* @Null檢查機制
* Kotlin的空安全設計對於宣告可為空的引數,在使用時要進行空判斷處理,有兩種處理方式:
* 1.欄位後加!!像Java一樣丟擲空異常
* 2.另一種欄位後加?可不做處理返回值為 null或配合?:做空判斷處理
*/
// 型別後面加?表示可以為空
var age: String? = null
// 丟擲空指標異常
// var ages=age!!.toInt()
// // 不作處理 返回null
// val ages1=ages?.toInt()
// age為空返回-1
val ages2 = age?.toInt() ?: -1
println(ages2)
型別檢測及自動型別轉換
/**
* @型別檢測以及自動型別的轉換
* 我們可以使用 is 運算子檢測一個表示式是否某型別的一個例項(類似於Java中的instanceof關鍵字)。
*/
fun getStringLength(obj: Any): Int? {
if (obj is String) {
return obj.length;
}
return null;
}
區間
/**
* @區間
* 1.區間表示式由具有操作符形式 .. 的 rangeTo 函式輔以 in 和 !in 形成。
* 2.區間是為任何可比較型別定義的,但對於整型原生型別,它有一個優化的實現。
*/
// 輸出 "1234"
for (i in 1..4) print(i)
println()
// 什麼都不輸出
for (i in 4..1) print(i)
println()
// 輸出 "4321"
for (i in 4 downTo 1) print(i)
println()
// if 和區間的配合使用
val i=4;
val l=3;
if (i in l..10){ // 等同於 i>=l && i<=10
println(i)
}
// 使用 step 指定步長
for (i in 1..4 step 2) print(i) // 輸出 "13"
println()
for(i in 4 downTo 1 step 2) print(i) // 輸出 "42"
println()
for(i in 1 until 10) print(i) // 列印除了10
println()