iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Software Development

成為一名 Kotlin 後端攻城獅系列 第 3

Day 3 Kotlin 可變與不可變變數

  • 分享至 

  • xImage
  •  

昨天講了一些基本型別,今天我們來談談變數。不過說起 Kotlin 變數,雖然生於 Java,但在變數這塊的設計可說是相當不同,基本上 Kotlin 裡面的變數可以根據修改限制分類為 val, var,當然也可以根據不同的作用域分為 local, top-level, Member (properties), Companion object,後面這些咒語我們之後再來補。

https://ithelp.ithome.com.tw/upload/images/20230918/20119910FKqqW3W9uq.png

這裡我們先根據修改的限制分別介紹 Immutable object (不可變物件) & Mutable object (可變物件)

不可變物件

在物件導向及函數程式語言中,不可變物件(英語:Immutable object)是一種物件,在被創造之後,它的狀態(成員變數、屬性等的值)就不可以被改變,當然它就具備執行緒安全的特性。 — Wiki-zh

  • val: 執行階段 (runtime) 不可變 (immutable) 的變數宣告,可用於指向程式中的物件,指派後不可再被修改,須符合不可變物件的性質。

    val a = 10
    val b: Int = 6    // 指定 b 變數為 Int 型別
    val c: Int = 3.2  // 錯誤: 我們無法在 Int 型別下賦予它浮點數
    b = 7             // 錯誤: 我們無法對 val 進行重新賦值
    
  • const: 編譯階段 (compile-time) 不可變 (immutable) 的變數宣告,呼叫到的程式碼在被編譯 (compile) 階段就被 Kotlin compiler 替換成在程式碼中被賦予的值,對於執行效率上會比 val 更高。

    • 合法使用方法 (會在程式碼被轉換為位元組碼 (Bytecode) 時取代呼叫處:

      const val MAX_VALUE = 100 
      const val PI = 3.14159
      
    • 非合法使用方法:

      const val currentYear = Calendar.getInstance().get(Calendar.YEAR)
      const val RESULT = someFunction() + 42
      
      // 錯誤: 使用執行階段生成的物件作為賦值來源
      

可變物件

  • var: 可變 (mutable) 的變數宣告,可用於指向程式中的物件,指派後它身上的值是可以被修改的。

    var b = 10
    var b: Int = 6 // 指定 b 變數為 Int 型別
    

上一篇
Day 2 基本型別
下一篇
Day 4 Kotlin 可空性
系列文
成為一名 Kotlin 後端攻城獅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言