2017年6月20日 星期二

[Kotlin] 學習筆記(2) - Basic Concept

在開始之前,附上一篇文章 17位Google Android 工程師對 Kotlin 的看法

來了解一下各方對 Kotlin 的見解

然後也提供一下學習資源 : Kotlin官方文檔

本篇大部分內容都是參考 Kotlin 的官方文檔來的,可以去該網站多挖挖寶

以下開始一些基礎介紹
  • Variables
有兩個關鍵字,val 和 var。val 就是 java 裡的 final,var 是可以重新賦值的變數

var 也有上面的宣告方式,差別在於 var 可以重新賦值

在 Kotlin,變數預設是 non-null type,也就是不能是 null

Kotlin 的一大特色就是能盡量減少 NullPointerException 發生的機率

以下是關於變數 null safety 的介紹
型態轉換也有 null safety 可以使用
如果今天有一個 class 的 property,我們不希望為 null,但也不想在 construtor 去初始化,該怎麼做呢?
lateinit 的用法有一些限制
(1) 只能用在 var 變數
(2) 不能用在 primitive type (Int, Float, ...) 
(3) 該變數不能有客製化的 setter 和 getter
  • Functions
有兩個 Int 的 parameters,回傳 type 是 Int
如果沒有 return value,用 Unit 表示,也可以把 Unit 省略
如果一個函式的參數比較多,這時候可以使用 named arguments 來增加可讀性
function 也可以使用 variable number of arguments

使用 vararg 有幾點注意事項
  1. function 只能有一個 parameter 被標示為 vararg
  2. vararg parameter 通常要放在 parameter list 的最後一個。如果不是最後一個,則在使用的時候,必須搭配 named argument 來使用
  • Class
在 Kotlin,如果 class 沒有指明父類別的話,都會是從 Any 這個例別衍生出來的

class 的基本宣告方式如下
Kotlin 有個和 Java 不一樣的地方是,Kotlin 沒有 new 這個 keyword
每個 class 都會有一個 primary constructor
primary constructor 是不能寫 code 的,必須使用 initializer block 來達到這個目的
Kotlin 還有提供 secondary constructor,一個 class 可以有多個 secondary constructor
在 Kotlin,function 和 constructor 的 arguments 都可以有 default value,這可以簡化原本 Java 的寫法
在繼承 class 的時候,constructor 的寫法有下列兩種情況
以下示範 derived class 如何複寫 function
當 derived class 繼承或實現多個 base class or interface 的情況呢
可以看到因為有 doAction() 的 supertype 不只一個,所以在 Derived class 就一定得用 override 去複寫這個函式

而在這種情況下,要指定使用哪個 supertype 的 doAction(),就可以使用 super<BaseName> 來指定

至於 showMsg() 和 power(),因為來源都只有一個,所以不會被強迫要求用 override 複寫

  • What's Next
本篇介紹一些 Kotlin 基礎的語法,可以看出來 Kotlin 有簡化一些 Java 語法,並且引入一些新的概念

不過也可以看出來,Kotlin 在某些部分也有一些限制,像是為了 null safety,programmer 必須在寫 code 的時候遵從一些語法才行

下一篇會繼續介紹 Kotlin 的基礎語法,讓各位更熟悉 Kotlin

沒有留言:

張貼留言