學習 Kotlin 系列:被凍結的時間 const val

學習 Kotlin 系列:被凍結的時間 const val

更新於 發佈於 閱讀時間約 3 分鐘

賦值 (Assign Value) 想成套繩圈的動作, var 的繩圈是可以鬆綁重來的,val 套住對方就不能換了,而進階版 const val 綁住對方之後,對方的時間就被凍結了。

其實,以 Kotlin 的程式語言設計來說,比起賦值 (Assign Value),用賦址 (Assign Reference) 來形容更為恰當,指定的是位址 (Reference, Address) 。開發的朋友可能聽過,以值呼叫,以位址呼叫(Call by value, Call by reference)。前者直接,後者間接。 Kotlin 全部都是 Call by reference 。

舉例來說,當我想呼叫小隊長小李時,前者是直接呼叫小李,後者呼叫的是小隊長。表面上結果是相同的,但其實只是現在相同。

以值來說,值因為是單純沒有指定性的,呼叫的只是小李的名字,而不是小李的人,當隔壁隊伍調來一個名字也是小李的人,電腦是辨別不出差異的。

以位址來說,假設小隊長是 var 設定,而這個呼叫延遲了數十年,也許那時已經換小小李上任小隊長,那麼結果就大大不同了;而如果是 val 設定,呼叫的還是小李,只是可能小李已經老了;而 const val 設定,讓小李一開始就是不會老的英靈

const val 時間凍結的效果自編譯 (Compile time) 完成起,相對於大部分變數是執行時 (Run time) 決定, const val 的設計不同,編譯時 (Compile time) 就決定了,也再不會變,所以 const val 只能寫在最頂層或是物件,因為這兩者也是編譯時決定。

const val 只能寫在最頂層或是物件。

const val 只能寫在最頂層或是物件。

編譯 (Compile) 就是把我們寫的高階語言翻譯成電腦可以理解的機器語言,如果要細述過程會花太多時間,也不是本章重點,這裡我們只需知道編譯期 (Compile time) 早於執行期 (Run time) 。

因為時間早早就被凍結了,所以和純 val 不同,不能指定有屬性可變化的類別,只能指定基本型別 (Basic Types) 。 Kotlin 官網文件有列舉所有基本型別,有興趣的朋友可以查看。

const val 只能指定基本型別。

const val 只能指定基本型別。

const val 因為是固定的,所以連本來準備的彈性變動空間都省下來了,用專業的術語來說就是提高效能。對於開發者來說,可讀性也提高,知道這是寫死的變數,要重寫時會特別留意。

大家都知道翻譯總是很難表達原意,因此更理解程式語言特性,程式就能寫得更精準,電腦也越能理解我們要做的事。

共勉之。

avatar-img
Kate的沙龍
6會員
45內容數
和 Kotlin 相關的系列文章。 給程式初學者的「Kotlin 學習系列」 給正在實戰的工程師「Kotlin 實戰系列」
留言
avatar-img
留言分享你的想法!
Kate的沙龍 的其他內容
比起說這是新技術,不如說是統一前端規格。 以前在不同框架下,類似功能的東西名字各不相同。比如輸入文字的物件,Android叫做EditText,iOS叫做UITextField,Html叫做TextBox或是input標籤。 這讓跨平台的開發者非常痛苦,痛不欲生。 而統一規格意味著,只要專心寫一套程
去年停了近一年這裡的文章,其實是因為忙著將2020 iThome 鐵人賽的得獎作品——每年九月會舉辦的活動,連續三十天發表IT技術類文章——集結成書。 《老姐要用Kotlin寫專案:從 Server 到 Android APP 的開發生存日記》是以小說的敘事方式,將一對姐弟工程師合作
此版本的目標畫面成果是: *金色名字。 *金色社交按鈕圖示,點擊按鈕另開對應的網頁或著顯示comming soon。 *名字和按鈕在網頁中央,如果網頁寬度不夠會換行,夠就不換行。
比起說這是新技術,不如說是統一前端規格。 以前在不同框架下,類似功能的東西名字各不相同。比如輸入文字的物件,Android叫做EditText,iOS叫做UITextField,Html叫做TextBox或是input標籤。 這讓跨平台的開發者非常痛苦,痛不欲生。 而統一規格意味著,只要專心寫一套程
去年停了近一年這裡的文章,其實是因為忙著將2020 iThome 鐵人賽的得獎作品——每年九月會舉辦的活動,連續三十天發表IT技術類文章——集結成書。 《老姐要用Kotlin寫專案:從 Server 到 Android APP 的開發生存日記》是以小說的敘事方式,將一對姐弟工程師合作
此版本的目標畫面成果是: *金色名字。 *金色社交按鈕圖示,點擊按鈕另開對應的網頁或著顯示comming soon。 *名字和按鈕在網頁中央,如果網頁寬度不夠會換行,夠就不換行。