Kotlin(二)-->基礎語法
阿新 • • 發佈:2019-01-04
基礎語法
定義包名
包名的定義應當在原始檔的頭部
package my.demo
import java.util.*
// ...
檔案路徑和包名並不要求匹配,原始檔可以被放置在檔案系統任意位置
參考:包
定義函式
函式有兩個Int型別引數和Int型別返回值:
fun sum(a: Int, b: Int): Int {
return a + b
}
函式體中只有一個表示式並且作為函式的返回值:
fun sum(a: Int, b: Int) = a + b
函式沒有返回值:
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
Unit型別的返回值型別可以省略:
fun printSum(a: Int, b: Int) {
print(a + b)
}
參見:函式
定義區域性變數
定義只讀型別的區域性變數:
val a: Int = 1
val b = 1 // `Int` 型別是被編譯器推理出
val c: Int // 當變數的初始值沒有被提供時,需要定義變數的型別
c = 1 // 賦值
可變區域性變數
var x = 5 // `Int` 型別是被編譯器推理出的
x += 1
可參見:屬性與變數
註釋
就像Java與JavaScripe,Kotlin也支援行註釋與程式碼塊註釋。
// 這是一段行註釋
/* 這是一段程式碼塊
註釋 */
不像Java,程式碼塊註釋在Kotlin中是可以被疊加的。
使用字串模板
fun main(args: Array<String>) {
if (args.size == 0) return
print("First argument: ${args[0]}")
}
參見:字串模板
使用條件表示式
fun max(a: Int, b: Int): Int {
if (a > b)
return a
else
return b
}
使用 if 作為一個表示式返回值:
fun max(a: Int, b: Int) = if (a > b) a else b
參見:if 表示式
使用可空變數並檢測是否為空
一個引用必須明確的被設定為可為空當其可能為空值時。
返回值為null 如果str 沒有包含數值:
fun parseInt(str: String): Int? {
// ...
}
函式的返回值可能為空:
fun main(args: Array<String>) {
if (args.size < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// Using `x * y` yields error because they may hold nulls.
if (x != null && y != null) {
// x and y are automatically cast to non-nullable after null check
print(x * y)
}
}
或者:
// ...
if (x == null) {
print("Wrong number format in '${args[0]}'")
return
}
if (y == null) {
print("Wrong number format in '${args[1]}'")
return
}
// x and y are automatically cast to non-nullable after null check
print(x * y)
參見:空安全
使用型別檢測和型別自動轉換
is 操作符用於檢測一個表示式是否是某一種型別,假如可變引數或者屬性被檢測為某一種型別,那麼就不在需要明確的型別轉換:
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` is automatically cast to `String` in this branch
return obj.length
}
// `obj` is still of type `Any` outside of the type-checked branch
return null
}
或者:
fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// `obj` is automatically cast to `String` in this branch
return obj.length
}
或者:
fun getStringLength(obj: Any): Int? {
// `obj` is automatically cast to `String` on the right-hand side of `&&`
if (obj is String && obj.length > 0)
return obj.length
return null
}
使用for迴圈
fun main(args: Array<String>) {
for (arg in args)
print(arg)
}
或者:
for (i in args.indices)
print(args[i])
參見:for迴圈
使用while迴圈
fun main(args: Array<String>) {
var i = 0
while (i < args.size)
print(args[i++])
}
使用when表示式
fun cases(obj: Any) {
when (obj) {
1 -> print("One")
"Hello" -> print("Greeting")
is Long -> print("Long")
!is String -> print("Not a string")
else -> print("Unknown")
}
}
使用範圍表示式
檢測一個數值是否在一個範圍內,若在則使用in操作符
if (x in 1..y-1)
print("OK")
檢測一個數值是否不在一個範圍內,若不在:
if (x !in 0..array.lastIndex)
print("Out")
迭代一個數據範圍項:
for (x in 1..5)
print(x)
參見:範圍
使用集合
迭代一個集合:
for (name in names)
println(name)
檢測一個集合是否包含某個資料項,使用in操作符
if (text in names) // names.contains(text) is called
print("Yes")
使用lambda表示式過濾或者轉換一個集合:
names
.filter { it.startsWith("A") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }