Kotlin語言裏的分號(;)、花括號({})、方括號([])、圓括號(())、空格、圓點(.)都具備特殊的分隔做用,所以被統稱爲分隔符。html
與Java不一樣,Kotlin並不強制要求每條語句必須以分號結尾,固然也可使用分號表示語句結束。正如前面程序所看到的,若是單獨一行內只有一條語句,Kotlin容許這條語句不以分號結尾。編程
但若是打算在同一行內書寫多條獨立的語句,則前面語句須要使用分號表示結束。例如以下語句:數組
var name = "fkit"; println(name)app
Kotlin容許一條語句能夠跨多行,例如,以下語句都是正確的:ide
var str = "fkit"函數
// 表達式能夠跨多行post
str +=ui
".org"this
// 調用方法時能夠跨多行url
var hasFk = str
.startsWith("fk")
var st = "fkit"
// 訪問屬性時也能夠跨多行
var len = st
.length
值得指出的是,一個字符串、變量名不能跨多行。例如,下面的Kotlin語句是錯誤的:
// 字符串不能跨多行
var a = "dddddd
xxxxxxx"
// 變量名不能跨越多行
var na
me = "李剛"
不只如此,雖然Kotlin語法容許一行書寫多條語句,但從程序可讀性角度來看,應該避免在一行書寫多條語句。
注意:Kotlin語句能夠跨越多行書寫,但字符串和變量名不能跨越多行。雖然Kotlin語法容許一行書寫多條語句,但從程序可讀性角度來看,應該避免在一行書寫多條語句。
花括號的做用就是定義一個代碼塊,一個代碼塊指的就是「{」和「}」所包含的一段代碼,代碼塊在邏輯上是一個總體。對Kotlin語言而言,類體部分、枚舉須要放在花括號中定義,方法體也必須放在花括號中定義。除此以外,條件語句中的條件執行體和循環語句中的循環體一般也放在代碼塊裏。
花括號通常是成對出現的,有一個「{」則必然有一個「}」,反之亦然。後面將會詳細介紹花括號分隔符的用法,此處再也不贅述。
Kotlin的方括號是一個索引運算符,方括號的主要做用是用於訪問數組元素、List集合元素和Map集合元素,方括號一般緊跟數組變量名、List變量名字或Map變量名,而方括號裏指定但願訪問的數組元素、List元素的索引或Map元素的key。
例如以下代碼:
// 下面代碼試圖對名爲a的數組的第四個元素賦值
a[3] = 3
// 下面代碼試圖對名爲scores的字典中key爲Kotlin的元素賦值
scores["Kotlin"] = 92
關於方括號分隔符的用法,後面還會有更進一步的介紹,此處再也不贅述。
圓括號是一個功能很是豐富的分隔符,定義函數、方法時必須使用圓括號來包含全部的形參聲明,調用函數時也必須使用圓括號來傳入實參值。不只如此,圓括號還能夠將表達式中某個部分括成一個總體,保證這個部分優先計算。
關於圓括號分隔符在後面還有更進一步的介紹,此處再也不贅述。
Kotlin語言使用空格分隔一條語句的不一樣部分。Kotlin語言是一門格式自由的語言,因此空格幾乎能夠出如今Kotlin程序的任何地方,也能夠出現任意多個空格,但不要使用空格把一個變量名隔開成2個,這將致使程序出錯。
Kotlin語言中的空格包含空格符(Space)、製表符(Tab)和回車符(Enter)等。
除此以外,Kotlin源程序還會使用空格合理地縮進代碼,從而提供更好的可讀性。
圓點(.)一般用做類、結構體、枚舉、實例和它的成員(包括屬性和方法)之間的分隔符,代表調用某個類或某個實例的指定成員。關於圓點分隔符的用法,後面還會有更進一步的介紹,此處再也不贅述。
所謂標識符就是用於給程序中的變量、類、枚舉、函數等命名的名字。Kotlin語言的標識符必須以字符(包括Unicode字符)、下畫線(_)開頭,後面能夠跟任意數目的字符、數字和下畫線(_)。此處的字符並不侷限於26個英文字母,能夠包含中文字符、日文字符等。標識符中不能夠包含空格,不能使用Kotlin的硬關鍵字,特定上下文內不容許使用軟關鍵字,標識符的長度沒有限制。
Kotlin語言是區分大小寫的,所以abc和Abc是兩個不一樣的標識符。
使用標識符時,須要注意以下規則。
Kotlin語言中有一些具備特殊用途的單詞被稱爲關鍵字(keyword),當定義標識符時,不要讓標識符與關鍵字相同,不然將引發錯誤。例如,以下代碼將會引發錯誤:
// 下面代碼試圖定義一個名字爲class的變量,但class是關鍵字,不能做爲標識符
var class = 2
Kotlin的關鍵字可分爲3類:
Kotlin的關鍵字可分爲3類:
硬關鍵字:這些關鍵字不管在什麼狀況下都不能用做標識符。 軟關鍵字:這些關鍵字能夠在它們不起做用的上下文內用做標識符。
修飾符關鍵字:這些關鍵字也能夠在代碼中用做標識符。
Kotlin的硬關鍵字包括:
Kotlin是強類型的語言,Kotlin要求全部的變量必須先聲明、後使用,聲明變量時必須顯式或隱式指定變量的類型,類型限制了一個變量能被賦的值,也限制了一個表達式能夠產生的值,還限制了在這些值上能夠進行的操做,並肯定了這些操做的含義。
聲明變量須要使用var或val,以下所示:
var|val 變量名 [:類型] [= 初始值]
其中var聲明的變量是值可變的(可被屢次賦值),val聲明的變量是值不可變的(不能被從新賦值).
在上面聲明變量的語法格式中,程序要麼經過「: 類型」的形式顯式指定該變量的類型,要麼爲該變量指定初始值——Kotlin編譯器將會根據該初始值肯定變量的類型,不能聲明變量時既不指定變量類型,也不指定變量初始值。聲明變量時能夠既顯式指定變量的類型,也指定該變量的初始值,但顯式指定的變量類型必須與初始值的類型保持一致。
例如以下代碼。
程序清單:codes\02\2.2\VarTest.kt
public fun main(args: Array<String>) {
// 聲明變量時顯式指定類型
var b : Int
// 聲明變量時指定初始值,編譯器會根據初始值肯定該變量的類型爲String
var name = "crazyit.org"
b = 20 // b的類型是Int(整型),賦值正確
name = "fkit.org" // name類型爲String,賦值正確
name = 12 // name類型爲String,但12爲Int,賦值錯誤
// 聲明變量時既顯式指定類型,也指定初始值
// 顯式指定的類型與初始值的類型一致,聲明變量正確
var age: Int = 25
age = 12 // age的類型是Int,賦值正確
// 聲明變量時既顯式指定類型,也指定初始值
// 顯式指定的類型與初始值的類型不一致,聲明變量失敗
var sun : String = 500
val book = "瘋狂Kotlin講義"
book = "a" // val聲明的變量是不可變變量,不能被從新賦值
}
對上面程序中5行粗體字代碼的解釋以下。
第1行粗體字代碼聲明變量時只顯式指定了變量的類型,並未指定初始值,所以變量b只能接受Int類型的值。
第2行粗體字代碼聲明name變量時並未顯式指定變量的類型,但程序爲該變量指定的初始值爲字符串"crazyit.org",所以編譯器能夠肯定該變量的類型爲String,該變量只能接受字符串類型的值。
第3行粗體字代碼聲明age變量時既指定了該變量的類型爲Int,也指定了該變量的初始值爲25,程序指定的變量類型與變量初始值的類型是一致的,所以程序正確。
第4行粗體字代碼聲明sun變量時指定了該變量的類型爲String,但程序又嘗試爲該變量指定500做爲初始值,這樣顯式指定的變量類型與變量的初始值類型並不一致,所以這行代碼是錯誤的。
第5行粗體字代碼使用val聲明瞭不可變的變量,所以該變量不容許被從新賦值,因此接下來爲book從新賦值代碼有錯誤。
使用val聲明的不可變變量其實至關於常量,常量意味着它的值一旦被初始化以後,將不能夠被從新賦值。根據常量所在的位置不一樣,Kotlin的常量分爲2種。
局部範圍的常量:這種常量容許在聲明時不指定初始值,只要在第一次使用以前指定初始值便可。
類的常量屬性:這種常量屬性既能夠在聲明時指定初始值,也能夠在類或結構體的構造器中指定初始值。
程序清單:codes\02\2.2\ValTest.kt
fun main(args: Array<String>) {
// 定義常量,沒有顯式指定類型,編譯器根據初始值肯定常量的類型
val maxAge = 120
// 定義常量時,既顯式指定了常量的類型,也指定了常量的初始值
val eduName : String = "瘋狂軟件教育"
// 常量不容許從新賦值,所以下面代碼是錯誤的
// maxAge = 12
// 同時定義多個變量
// 局部範圍的常量,聲明時不指定初始值
val herName: String
}
對上面程序中3行粗體字代碼的解釋以下。
第1行粗體字代碼聲明常量時只指定了常量的初始值,編譯器將根據初始值來肯定該常量的類型。
第2行粗體字代碼聲明eduName常量時既顯式指定了該常量的類型,也指定了該常量的初始值。
第3行粗體字代碼使用val聲明瞭一個String類型的常量,但並未指定初始值——這是由於局部範圍的常量,並不要求在定義時指定初始值,只要在第一次使用以前指定初始值便可。
須要指出的是,因爲Kotlin程序編譯的字節碼必須遵照JVM規範,所以若是直接在Kotlin程序中定義變量、函數,kotlinc會將自動生成一個名爲:文件名首字母大寫+Kt的類,並將變量轉換爲該類的靜態的getter、setter方法(其中val聲明的只有getter方法),函數則轉換爲該類的靜態方法。
注意:當使用kotlinc編譯Kotlin程序所包含的函數、變量時,這些函數、變量都會轉換成該文件對應類的靜態方法。
另有一點須要說明的是:因爲Kotlinc會爲包含函數、變量的Kotlin程序生成額外的類,這就要求咱們不能在該包下重複定義同名的類。例如,咱們定義了一個名字爲ligang.kt的Kotlin程序,且該程序中包含了函數或變量,那麼kotlinc就會自動生成LigangKt類,所以咱們就不能在該包下重複定義LigangKt類。