更新於 2020/07/27閱讀時間約 2 分鐘

學習 Kotlin 系列:一生綁定 val v.s 自由任命 var

行程 (Process),正如其名,指的是正在執行的程式 (Program),變數在其之中,是獲得命名,能保留自我的少數特殊存在。如果變數屬於全域變數 (Global Value),那麼其生命週期就會和行程一致,其他較短生命週期的都是局部變數 (Local Value)。
從一而終,在生命中止前不變其 reference 值的就是唯讀變數 val ,反之就是可讀寫 變數 var ,簡單的記法有 l 直線 r 分岔;也因為前者不能改變,所以必須在初始時就指定賦值 (Assign Value)。
賦值就是將單一對象指派給變數,做法是用一個等號將右邊對象 b 指派給左邊 a (a = b),至於數學上的相等則是用兩個等號 (a == b),關於其他數學邏輯判斷會在後續章節補充。
但所謂的唯讀並非是指整個變數不變化,而是指不能二次賦值,一生綁定,比如指定小李成為小隊長之後,這個職位再也不能換成其他人,小李本身想卸任也不行,但是小李本身的屬性還是和其他士兵一樣可以變化,增減年紀。
反之, var 就代表在類別限制下可以自由任命,只要是士兵,都有機會當一日小隊長。
所謂參數 (Parameter),是函數開放接口給外部來源參與其中的機會,可以傳遞基本型別、物件或是函數;如果來的是物件,還有可能被改造,以改造後的屬性離開函數,就像是士兵收到突擊命令,可能會受傷而歸。
在類別裡,無論是自身宣告的變數或是來自第一建構子函數的變數參數,都算是給了一個名義,類別從此有這樣一個屬性 (Property),屬性生命週期和物件一樣,可以在適當情境延伸引用,比如士兵的年齡到了就該退伍。
如果沒有名義,那就像是曇花一現,過眼雲煙,只在傳入的那個時間那個地點存在,無法隨意應用。用過就丟的特性正適合子彈這類消耗品或是不留下紀錄的命令。
士兵類別裡命令變數只存在於第一建構子函數,同類別的其他函數也無法識別;也因為連屬性都不是,外部無法引用。
士兵類別裡命令變數只存在於第一建構子函數,同類別的其他函數也無法識別;也因為連屬性都不是,外部無法引用。
除了特例第一建構子函數以外,一般函數沒有屬性的概念,所以參數不接受非法設定 不存在的屬性;相對的,函數區塊裡可以宣告變數,和屬性的差異在於限定函數內部使用,生命週期和函數一樣。
函數和類別不同,沒有屬性的概念。加上 val, var 的行為是畫蛇添足,Compiler 不開心 。
參數會自動被歸類成函數的生命週期 val 變數,和前述規則相同,函數不能賦值參數,但是可以改變參數屬性。
參數會自動被歸類成函數的生命週期 val 變數,不能賦值。
幼齡化命令能作用於參數士兵。
建構子函數會在後面的章節說明。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.