Kotlin学习笔记(3)- 语法
系列文章全部為本人的學習筆記,若有任何不妥之處,隨時歡迎拍磚指正。如果你覺得我的文章對你有用,歡迎關注我,我們一起學習進步!kotlin學習筆記系列首發簡書和CSDN
Kotlin學習筆記(1)- 環境配置
Kotlin學習筆記(2)- 空安全
Kotlin學習筆記(3)- 語法
Kotlin學習筆記(4)- 流程控制
Kotlin學習筆記(5)- 類
Kotlin學習筆記(6)- 屬性
Kotlin學習筆記(7)- 接口
Kotlin學習筆記(8)- 擴展
Kotlin學習筆記(8)- 擴展(續)
Kotlin學習筆記(9)- 數據類
Kotlin學習筆記(10)- 泛型
Kotlin學習筆記(11)- 內部類和嵌套類
Kotlin學習筆記(12)- 委托
Kotlin學習筆記(13)- 函數式編程
Kotlin學習筆記(14)- lambda
一、基礎語法
在語句的結尾不用加;
聲明一個方法需要加關鍵字fun
如果函數是重載父類的方法,則需要加override關鍵字
方法中的參數格式為:形參名+冒號+形參類型
fun a (str : String, num : Int)二、定義類
kotlin默認唯一構造器,暨類定義同時也是構造器
class Person(name : String, age : int) { init{ // do some thing } } 翻譯成java為:final public class Person {public Person(String name, int age){init();}private void init(){// do some thing} }仔細看會發現,翻譯成的java類定義前面有final修飾符,因為在kotlin中類默認為final的,也就是不可繼承的。如果要繼承,需要聲明為open,或者abstract。
open class Person(name : String, age : int) { init{ // do some thing } }如果init中沒有操作,則可以省略
class Person(name : String, age : int)如果連參數也沒有,甚至可以這么寫
class Person三、定義函數方法
函數方法要加fun關鍵字,方法的返回類型寫在參數后
fun sum (a : Int, b : Int) : Int {return a+b }如果像上面這樣,函數內只有一條語句,則可以直接賦值
fun sum (a : Int, b : Int) : Int = a+bkotlin編譯器會自動根據返回值推測方法返回類型
fun sum (a : Int, b : Int) = a+b如果方法需要返回值,則返回Unit,類似java中的void,當然Unit也是可以忽略的
fun printSum (a : Int, b : Int) : Unit = print(sum(a, b)) //等價于 fun printSum (a : Int, b : Int) = print(sum(a, b))看到網上資料說,如果方法是public的,則必須要聲明返回類型。但是我自己試驗發現kotlin的方法默認是public的,同時上面說的幾點都適用,也就是不是必須要明確聲明返回類型。如有錯誤之處,歡迎隨時拍磚指正。
四、定義變量
kotlin中將java中的變量演化成了兩種:var表示變量,val便是常量(相當于java中用final修飾)
var a : Int = 1 // 定義一個普通變量 var b = 2 // 和方法的返回類型一樣,編譯器也會根據值自動判斷變量類型 b = 3 // 普通變量可多次賦值 val c = 1 // 定義一個常量,和普通變量一樣,編譯器也會自動判斷類型 c = 2 // 提示編譯錯誤,無法運行。常量只能賦值一次 val d : Int // 如果常量在定義的時候沒有賦值,則必須明確類型 d = 1 // 賦值五、使用泛型Array代替數組
例如最經典的main方法
Java: public static void main(String[] args){// do some thing }Kotlin: fun main(args : Array<String>){// do some thing }六、條件語句
fun max(a: Int, b: Int): Int {if (a > b)return aelsereturn b } //或者也可以把if語句作為省略方法體的方法 fun max(a: Int, b: Int) = if (a > b) a else b七、空值
在類型后面跟一個問號?表示可能為空,跟雙感嘆號!!表示一定不能為空。具體的請看我上一篇文章《Kotlin學習筆記(2)- 空指針》。
八、類型檢測并自動轉換
fun getStringLength (obj : Any) : Int? { // 通過is關鍵字做類型判斷if(obj is String){ // 類型判斷后,系統自動轉型,這里自動將obj轉為String類型return obj.length} // 類型判斷之外,obj依然是Any類型,沒有被轉型,所以不能調用length,會報編譯錯誤var length = obj.lengthreturn null } fun getStringLength (obj : Any) : Int? { // 通過is關鍵字做類型判斷,因為第一個判斷條件已經通過并自動轉型, // 所以第二個判斷時obj可以直接作為String類型使用if(obj is String && obj.length > 0){ // 類型判斷后,系統自動轉型,這里自動將obj轉為String類型return obj.length}return null }九、循環
for循環,使用in關鍵字
fun main(args : Array<String>) {for(arg in args)print(arg)for(i in args.indices)print(args[i])for((index, value) in args.withIndex()){println("index : $index, value : $value")} }while循環,和java的基本一致
fun main(args : Array<String>) {var i = 0while (i < args.size){print(args[i++])}var j = 0do{print(args[j])}while (++j<args.size) }十、when表達式(類似于java中的switch)
when的特性與switch差不多,都是通過列舉比對列舉出來的條件進行匹配,滿足條件的分支會被執行。when可以作為表達式,也可以作為聲明。如果用作表達式的話,那么滿足條件的分支就是總表達式。如果用做聲明,不滿足條件的分支的的的值會被忽略,只保留滿足條件的分支,而且返回的值也是最后一個表達式的值。
傳統用法
var x = 3 when (x) {1 -> print(1)2 -> print(2)else -> print(5) }作為表達式,滿足條件的分支會被作為when的返回值
var x = 3 var result = when (x) {1 -> 12 -> 2else -> 5 }分支條件一致,如果有分支可以用同樣的方式處理的話, 分支條件可以連在一起處理。
when (x) {0,1 -> print("x == 0 or x == 1")else -> print("otherwise") }使用任意表達式作為分支的條件
when (x) {parseInt(s) -> print("s encode x")else -> print("s does not encode x") }when (x) {in 1..10 -> print("x is in the range")in validNumbers -> print("x is valid")!in 10..20 -> print("x is outside the range")else -> print("none of the above") }總結
以上是生活随笔為你收集整理的Kotlin学习笔记(3)- 语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin学习笔记(2)- 空安全
- 下一篇: SQLite.NET.0.17 的离奇之