Kotlin總覽

kotlin是我學習的第四門語言了(c,JavaScript,Java),目前初學的感覺,他和JavaScript是差不多的。作爲谷歌的親兒子,還是可以認真學習下的,相信其他的google出品的如go應當也是差不多的

語言特點

  1. 無需分號結尾語句
  2. 自動類型推測
  3. 當一個引用可能爲 null 值時, 對應的類型聲明必須明確地標記爲可爲 null。

基礎語法

  1. 定義
    package my.example
  2. 導入
    import my.demo.*

與Java不同,目錄與包的結構無需匹配:源代碼可以在文件系統的任意位置。

程序入口(main方法)

fun main() {
    println("Hello world!")
}

變量

var a:Int=1

常量

val a:Int
a = 1

const

未被const修飾的屬性只能被 get of set 方法調用,而不能直接調用。而const修飾的屬性是可以被直接調用的,實際上是等同於Java中的 public static final。

const 只允許在top-level級別(file 級別)和object中聲明

函數

關鍵字 fun
基本結構:
fun + 函數名+參數列表+返回值類型(可不加,默認爲Unit類似void)

注意
1 函數可只由一條語句構成,這是一種簡寫的狀態,js中也有類似寫法,如:

fun hasPrefix(x:Any) = x is String

fun hasPrefix(x:Int):Int = if(x > 2) x else 2

fun hasPrefix(x:Any) = when(x){
  is String -> true
  else -> false;
}

字符串拼接

使用實現字符串拼接,+變量名,或${方法調用}

NULL檢查機制

我想這裏其實是一個很好的設計,很好的對引用的對象如變量,函數返回值在取Null值得行爲這一層面上進行了分類。

  1. 允許爲空 + ?,若爲空,那麼此條表達式不做處理直接返回
  2. 不允許爲空 + !!,爲空則拋出異常 kotlin.KotlinNullPointerException

類型檢測及自動類型轉換

個人覺得這是個很巧妙的設計,雖然還不知道有什麼用…總的來說,kotlin可以使用is或 !is 關鍵字判斷引用類型,類似於Java的instance of,巧妙的是,如果成功的is了,或者邏輯上能夠縮小引用的類型範圍了,那麼會自動轉型成對應的類型。

example:

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做過類型判斷以後,obj會被系統自動轉換爲String類型
    return obj.length 
  }

  //在這裏還有一種方法,與Java中instanceof不同,使用!is
  // if (obj !is String){
  //   // XXX
  // }

  // 這裏的obj仍然是Any類型的引用
  return null

#### 區間範圍
這對我是一個全新概念,表示一個區間範圍(等差數列集合),參考:
https://www.kotlincn.net/docs/reference/ranges.html

只能用例子實驗了:

for(i in 1..10) {
      print(i.toString()+" - ")
    }
    println()
    for(i in 10 downTo 1) {
        print(i.toString()+" - ")
    }
    println()
    for(i in 1..10 step 2) {
        print(i.toString()+" - ")
    }
    println()
    for(i in 10 downTo 1 step 2) {
        print(i.toString()+" - ")
    }

條件語句

與其他的語言中的if使用所不同的是,我們也可以把 IF 表達式的結果賦值給一個變量。因此kotlin裏是沒有三元操作符的,完全可以通過if else條件語句替代。需要注意的是,需要換行

code

fun main() {
    var a:Int = 3;
    var b:Int = 2;
    var c = if(a > b) {
        println("i choos a")
        a}
           else  {
        println("i choos b")
        b}
    println(c)

分支語句

在kotlin中使用when替代switch

fun main() {
    var num:Int = 3;
    when(num) {
        3 -> println(3333)
        2 -> println(2222)
    }
}

值得注意的是,他與switch又不是相同的,在我看來算是一個優化版的switch了,如下:

 public static void main(String[] args) {
        int num = 3;
        switch (num){
            case 3: {
                System.out.println(3333);
            }
            case 2: {
                System.out.println(222);
            }
        }
    }

Java代碼會輸出 3333 2222。其實一直以來,我就覺得switch中需要額外手動break就是一個過度設計,kotlin解決了這個問題,實際上他更加體現了分支這個詞的含義;

  1. 無需break判斷的主語,如果沒有傳入參數,那麼則需要我們自行確定主語如:
fun hasPrefix(x:Any) = when(x){
  is String -> true
  else -> false;
}
等於
fun hasPrefix(x:Any) = when {
  x is String -> true
  else -> false;
}
  1. 不一定需要傳入參數,如果傳入了參數假設是x,那麼x默認爲條件

循環語句

for循環

for可分爲2種:

  1. 基於迭代器:
    針對collection集合的遍歷將會使用collection內置的iteator迭代器
  2. 遍歷數組索引

while循環

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章