Kotlin基礎語法學習筆記
阿新 • • 發佈:2019-01-05
Kotlin簡介
Kotlin是一門與Swift類似的靜態型別JVM語言,由JetBrains設計開發並開源。與Java相比,Kotlin的語法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函式、操作符過載、字串模板。它與Java高度可互操作,可以同時用在一個專案中。Kotlin官方文件下載地址
Kotlin語法
1、函式的使用
定義函式使用fun關鍵字,如下程式碼所示:fun add(a: Int, b: Int): Int {
return a + b
}
函式add有兩個Int型的引數,冒號後跟的是函式的返回值,一條程式碼語句的末尾不用加分號,當然加上分號也沒有問題。
上面的add函式還可以簡寫成如下形式:
沒有顯式指定函式的返回值,會自動推斷函式的返回值。 如果一個函式沒有返回值,可以寫成如下兩種形式:fun add(a: Int, b: Int) = a + b;
//沒有返回值的函式,顯式指定Unit為返回值
fun showAddResult(a: Int, b: Int): Unit {
println(a + b)
}
//沒有返回值的函式,省略Unit的寫法
fun showAddResult2(a: Int, b: Int) {
println(a + b)
}
2、常量和變數
使用val關鍵字宣告一個常量(只讀,不可修改),使用var關鍵字宣告一個變數,下面是具體用法:fun test() { //使用val關鍵字宣告一個常量(只讀),宣告常量時必須初始化 val a: Int = 1 //顯式指定常量的型別 val b = 2 //自動推斷型別 val c: Int //宣告一個不初始化的常量,必須顯式指定型別 // b = 3 //常量值不可修改,這句程式碼會報錯 //a = 3 //不可以修改常量的值,此句程式碼會報錯 //使用var關鍵字宣告一個變數,變數的值可以修改 var year: Int = 2016 //顯式指定變數的型別 var month = 5 //自動推斷變數型別 var day: Int //宣告一個不初始化的變數,必須顯式指定型別 month = 6 //變數值可以被修改 }
3、註釋
Kotlin中的註釋和Java中類似,如下所示:fun comments() {
// 註釋一行程式碼
// var s = "hello world"
/*註釋一段程式碼
var a = 8
a++
a--*/
}
和Java不同的是,Kotlin中的註釋可以巢狀。
4、字串模板
上面的程式碼執行後,在控制檯列印如下內容://字串模板的用法 fun stringTempl(args: Array<String>) { if(args.size > 0) println("args[0] = ${args[0]}") } //main方法是整個程式的入口 fun main(args: Array<String>){ var arr = arrayOf("hello", "world") stringTempl(arr) }
5、條件表示式
常規的條件表示式可以是這麼寫的://常規寫法的條件表示式,這裡的函式返回值不能省略
fun max(a: Int, b: Int): Int {
if(a > b)
return a
else
return b
}
Kotlin可以簡寫條件表示式,如下所示:
//簡寫的條件表示式
fun max2(a: Int, b: Int) = if(a > b) a else b
6、可空型別
fun nullableTest() {
//在變數型別後面加上問號,代表該變數是可空變數
var name: String? = "zhangsan"
name = null //可以將null賦值給name變數
var person: String = "tom"
// person = null //這句程式碼會報錯,不可以將null賦值給一個不可空變數
}
函式返回值為可空的例子如下程式碼:
/*
函式返回值為Int?,表示返回值可為空
當引數為空或者為""時,則返回null,否則使用Java中的字串轉整型的方法
這裡也體現了kotlin程式碼和Java程式碼無縫整合
*/
fun parseInt(s: String): Int? {
if(s == null || s == "")
return null;
return Integer.parseInt(s);
}
7、型別檢查和自動型別轉換
Kotlin中使用is運算子來檢查資料型別和做型別轉換,如下程式碼所示:/*
當函式引數為字串型別時,就返回字串的長度,否則返回空
*/
fun getStringLength(n: Any): Int? {
if(n is String)
return n.length //這裡會自動將n轉化為字串型別
return null
}
上面的程式碼還可以寫成:
/*
當函式引數為字串型別時,就返回字串的長度,否則返回空
*/
fun getStringLength(n: Any): Int? {
if(n !is String)
return null
return n.length //這裡會自動將n轉化為字串型別
}
8、for迴圈和while迴圈
//for迴圈的測試程式碼
fun testFor() {
var arr = arrayOf(1, 3, 4, 5, 6)
for(i in arr.indices) { //通過索引迴圈
println(arr[i])
}
for(num in arr) { //直接使用陣列中的物件迴圈
println(num)
}
}
//while迴圈的測試程式碼
fun testWhile() {
var i = 0;
while(i < 10) {
print(" " + i)
i++
}
}
9、when表示式
when表示式就類似於Java中的switch表示式,如下程式碼所示:fun main(args: Array<String>) {
testCase("hello world")
}
fun testCase(obj: Any) {
when(obj) {
is String -> {
print("this is string")
}
is Int -> {
print("this is integer")
}
else -> {
print("unkown value")
}
}
}
10、ranges的使用
(1)使用in操作符檢查一個數是否在某個範圍內
/*
判斷分數是否大於等於90,小於等於100
*/
fun isGood(score: Int) {
if(score in 90..100) //ranges是閉區間
println("very good")
else
println("not so good")
}
(2)檢查索引是否越界
/*
檢查index是否在陣列arr的索引範圍內
*/
fun checkIndex(index: Int, arr: Array<Int>) {
if(index in 0..arr.lastIndex) //arr.lastIndex返回的是陣列的最後一位的下標
println("index in bounds")
else
println("index out of bounds")
}
(3)遍歷一個範圍
for(i in 1..5) {
println(i)
}
也可以通過in運算子遍歷一個集合,如下程式碼:
//in運算子遍歷一個字串陣列
fun testStr(arr: Array<String>) {
for(str in arr)
println(str)
}