Kotlin的基本語法和型別

殘夢之翼發表於2019-02-27

基本型別

Kotlin 中使用的基本型別:數字、字元、布林值、陣列與字串。

數字

Type Bit
Double 64
loat 32
Long 64
Int 32
Short 16
Byte 8

表示方式

在Kotlin中數值長亮可用字面表達有:

  • 十進位制: 123
    Long 型別用大寫 L 標記: 123L
  • 十六進位制: 0x0F
  • 二進位制: 0b00001011

自1.1起可以使用下劃線使數字常量更易讀:

val oneMillion = 1_000_000                         => 100000
val creditCardNumber = 1234_5678L                  => 12345678
val socialSecurityNumber = 999_99_9999L            => 999999999
val hexBytes = 0xFF_EC_DE_5E                       => 4293713502
val bytes = 0b11010010_01101001_10010100_10010010  =>3530134674
複製程式碼

型別轉換

型別轉換有兩種:

  • 隱式轉換
val a: Int? = 1 // 一個裝箱的 Int (java.lang.Integer)
val b: Long? = a // 隱式轉換產生一個裝箱的 Long (java.lang.Long)
Log.d("",a == b+"") => false 
複製程式碼

Long 的 equals() 檢測其他部分也是 Long,而較小的型別不能隱式轉換為較大的型別。

  • 顯式轉換
val b: Byte = 1 // OK, 字面值是靜態檢測的
val i: Int = b // 這裡就會報錯,編譯不通過

顯式轉換
val i: Int = b.toInt()

複製程式碼

基本轉換如下:

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

基本語法

定義函式

//函式=> Android的方法
//基本的函式  Unit表示無意義的返回可有可無
fun sum():Unit{
    .....
}
//帶引數的函式
fun sum(a: Int, b: Int){
    .....
}
//有返回值得函式
fun sum():Int{
    return 0
}
//表示式作為函式體
fun sum(a: Int, b: Int) = a + b
複製程式碼

定義變數

//定義變數的基本方法:var 變數名:變數型別 = 變數初始值

/******************可變變數*******************/
var a: Int = 1  // 立即賦值
val c: Int  // 如果沒有初始值,型別不能省略
c = 3       // 明確賦值

//型別後+ ? 表示可為空
var name: String? = null;

//lateinit延時載入 可在全域性只定義不初始化
lateinit var sex: String;

//自動推斷出型別 定義的時候直接賦值可自動推斷出型別
var a = 2

/******************只讀變數*******************/
val PI = 3.14

/*****************陣列***********************/
//例項化一個陣列,長度為3 值為 1 2 3
var sz: Array<String> = Array(3, { i -> (i +1).toString() })

/*****************集合***********************/
val items = listOf(1, 2, 3, 4)
複製程式碼

注意:在Kotlin中定義變數使用 var 和 val,val表示只讀,相當於Android的final

使用字串模板

var a = 1
// 模板中的簡單名稱:
val s1 = "a is $a"  => "a is 1"

var b = 2
// 模板中的任意表示式:
val s2 = "${s1.replace("is", "was")}, but now is $b"  => a was 1,but now is 2

複製程式碼

if條件表示式

fun maxOf(a: Int, b: Int): Int {
    if (a > b)
        return a
    else 
        return b
}

fun main(args: Array<String>) {
    Log.d("","max of 0 and 42 is ${maxOf(0, 42)}") => max of 0 and 42 is 42
}
複製程式碼

使用可空值及null檢測

fun parseInt(str: String): Int? {
    return str.toIntOrNull()
}
var age = "10";
var name = "Ez"

val x = parseInt(age)  => 10
val y = parseInt(name) => null 空物件

複製程式碼

for迴圈

//  item項迴圈
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    Log.d("",item)    => apple  banana  kiwi
}
//下標迴圈
val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
    Log.d("","$index is ${items[index]}")  
}
=>  0 is apple
    1 is banana
    2 is kiwi

複製程式碼

when 表示式

val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    when (item) {
        "apple" ->{
       Log.d("==", "apple")
    }
        "banana" -> Log.d("==", "banana")
        else -> {
            Log.d("==", "kiwi")
        }
    }
}
複製程式碼

注意:when 相當於switch操作符,可以使用塊{},也可以直接執行。

區間

val x = 10
val y = 9
if (x in 1..y+1) {
   //x在1到10之間包括1和10
}
if (x !in 1..y+1) {
   //x不在1到10之間包括1和10
}


//區間迭代
 for (x in 1..5) {
         Log.d("==", "x")  => 1 2 3 4 5
    }

//數列迭代
for (x in 1..10 step 2) {
        Log.d("==", "x")  => 1 3 5 7 9
    }
for (x in 9 downTo 0 step 3) {
        Log.d("==", "x")  => 9 6 3 0
    }
複製程式碼

使用lambda 表示式來過濾(filter)和對映(map)集合

val fruits = listOf("banana", "avocado", "apple", "kiwi")
fruits.filter { it.startsWith("a") }  //首字母是"a"
      .sortedBy { it }
      .map { it.toUpperCase() }       //大寫
      .forEach {  Log.d("===",it) }   =>APPLE  AVOCADO
複製程式碼

lambda表示式以及高階函式可檢視官網

建立基本類及其例項

val rectangle = Rectangle(5.0, 2.0) // 不需要“new”關鍵字
複製程式碼

剛開始使用的確很不習慣,不過程式碼的確非常的簡潔,感覺寫法很像是前端的,大致來講還是非常好用的。

相關文章