一、函數
Kotlin中,使用關鍵字fun來申明函數,fun 后面緊跟著的是函數名,函數形式參數,返回值,函數體
例如:
函數名:sun
形參:有a、b兩個,都是Int類型,
返回值:以:申明后面跟著的是具體的返回值類型,如需要返回無意義的值(java的void)時可以不寫或者用Unit<br />
fun sum(a: Int, b: Int): Int {
return a + b
}
無返回值
fun printSum(a: Int, b: Int):Unit {
println("sum of $a and $b is ${a + b}")
}
或者不寫Unit
fun printSum(a: Int, b: Int):Unit {
println("sum of $a and $b is ${a + b}")
}
<br />
Main函數
fun main(args: Array<String>) {
println("hello world");//在kotlin中,對;結束標識符沒有作嚴格要求,可寫可不寫,println是kotlin種的打印語句相當于java的System.out.println
}
二、常量與變量
kotlin中常量和變量的定義分別用val、var來定義,定義常量和變量分別有以下幾種形式:
常量的定義(使用val關鍵字)
val a: Int = 1 // 立即賦值
val b = 2 // 自動推斷出 `Int` 類型
val c: Int // 如果沒有初始值類型不能省略
c = 3 // 明確賦值
變量的定義(使用var關鍵字)
var x = 5 // 自動推斷出 `Int` 類型
x += 1
三、數據類型
在 Kotlin 中,所有東西都是對象,在這個意義上講所以我們可以在任何變量上調用成員函數和屬性。有些類型是內置的,因為他們的實現是優化過的。但是用戶看起來他們就像普通的類。本節我們會描述大多數這些類型:數字、字符、布爾和數組。<br />
1.數字類型
Kotlin 提供了6種類型來表示數字(與 Java 很相近):Double、Float、Long、Int、Short、Byte<br />
注意在 Kotlin 中字符不是數字<br />
kotlin中數字類型的字面值有個特性,就是支持下劃線使得數字更有閱讀性(從kotlin以后1.1)<br />
例如:
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
值常量字面值有以下幾種:
十進制: 123<br />
Long 類型用大寫 L 標記: 123L<br />
十六進制: 0x0F<br />
二進制: 0b00001011<br />
注意: 不支持八進制<br />
Kotlin 同樣支持浮點數的常規表示方法:<br />
默認 double:123.5、123.5e10<br />
Float 用 f 或者 F 標記: 123.5f<br />
2.類型轉換
-
隱式轉換,不需要書寫格外代碼,由系統自動實現類型轉換,Kotlin中如果定義變量明確指定了數字類型,那么就不能進行隱式轉換了,如下面的代碼就不被支持
val a: Int? = 1 // 一個裝箱的 Int (java.lang.Integer) val b: Long? = a // 隱式轉換產生一個裝箱的 Long (java.lang.Long) 正確的轉換代碼: val a:Int? = 1 val b:Long? = a.toLong
-
顯示轉換,需要使用格外的代碼,如需要把一個Int類型轉換成Long類型,需要使用Int.toLong
每個數字類型支持如下的轉換: toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double toChar(): Char
3.布爾
布爾用 Boolean 類型表示,它有兩個值:true 和 false。
若需要可空引用布爾會被裝箱。
內置的布爾運算有:
|| – 短路邏輯或
&& – 短路邏輯與
! - 邏輯非
4.數組
數組在 Kotlin 中使用 Array 類來表示,它定義了 get 和 set 函數(按照運算符重載約定這會轉變為 [])和size 屬性,以及一些其他有用的成員函數:
class Array<T> private constructor() {
val size: Intoperator fun get(index: Int): Toperator fun set(index: Int, value: T): Unitoperator fun iterator(): Iterator<T>// ……
}
我們可以使用庫函數 arrayOf() 來創建一個數組并傳遞元素值給它,這樣 arrayOf(1, 2, 3) 創建了 array [1, 2, 3]。 或者,庫函數 arrayOfNulls() 可以用于創建一個指定大小、元素都為空的數組。
另一個選項是用接受數組大小和一個函數參數的工廠函數,用作參數的函數能夠返回 給定索引的每個元素初始值:
Kotlin 也有無裝箱開銷的專門的類來表示原生類型數組: ByteArray、 ShortArray、IntArray 等等。這些類和 Array 并沒有繼承關系,但是 它們有同樣的方法屬性集。它們也都有相應的工廠方法:
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
數組的使用Demo
fun testArray() {
//數組的定義
var arrays: Array<Int> = arrayOf(12, 21, 33, 44, 55);//定義一個Int類型數組,直接賦值
var arrays2: Array<Int?> = arrayOfNulls<Int>(arrays.size)//定義一個長度和arrays一樣的空數組,后賦值
//遍歷arrays數組,并且給arrays賦值
for (c in 0..arrays.size-1){
println("arrays的值遍歷:${arrays[c]}");
arrays2.set(c,arrays.get(c)+1)
}
//遍歷arrays2數組
for (c in arrays2) {
println("arrays2:$c ");
}
}
5.字符串
字符串用 String 類型表示。字符串是不可變的。 字符串的元素——字符可以使用索引運算符訪問: s[i]。 可以用 for 循環迭代字符串:
for (c in str) {
println(c)
}
字符串字面值<br />
Kotlin 有兩種類型的字符串字面值: 轉義字符串可以有轉義字符,以及原生字符串可以包含換行和任意文本。轉義字符串很像 Java 字符串:
val s = "Hello, world!\n";//轉義采用傳統的反斜杠方式
原生字符串 使用三個引號(""")分界符括起來,內部沒有轉義并且可以包含換行和任何其他字符:
val text = """
for (c in "foo")
print(c)"""
也可以類似Java中通過 trimMargin() 函數去除前導空格:
val text = """|Tell me and I forget.|Teach me and I remember.|Involve me and I learn.|(Benjamin Franklin)""".trimMargin()
默認 | 用作邊界前綴,也可以選擇其他字符并作為參數傳入,比如 trimMargin(">")。
6.字符串模板
字符串可以包含模板表達式 ,即一些小段代碼,會求值并把結果合并到字符串中。 模板表達式以美元符($)開頭,由一個簡單的名字構成:
val i = 10
val s = "i = $i" // 求值結果為 "i = 10"