第24天Kotlin小學堂(13) | 魚的世界
在編譯階段,編譯器會先檢查程式碼是否符合特定要求,確認無誤後再編譯成機器指令。所以我們把null指派給非空的hp變數,Kotlin就會拒絕編譯,這類在編譯期捕獲的錯誤叫做 ...
今天要來討論的是之前稍微提到過的null,null是一個特殊值,用來表示變數的值不存在。包含Java在內的許多語言,null常常導致程式崩潰。 為什麼程式會這麼常因為這一個特殊值null引起崩潰呢?第一行代碼的作者郭霖提到:「我認為主要是因為空指針是一種不受編成語言檢查的運行時的異常,由程序員主動通過邏輯判斷來避免,但即使是最出色的程序員,也不可能將所有潛在的空指針異常全部考慮到。」 所以,在kotlin語言中,要求做特別的宣告,讓工程師有意識的使用null,這有助於避免null相關的程式崩潰。
可空性 Nullability如前所述,Kotlin需要做特別的宣告才可以指派null值給元素。這種被宣告可以指派null的元素就可以說可為空,反之就是不可空。比如說,設置一變數hp來紀錄遊戲玩家的血量值,這個hp就不可能為空,hp的血量可以為零,但不能為空,因這樣不合邏輯,0 與 null 是不同的概念。
使用「?」表示可空那如何做這個特別的可空性宣告呢?其實就在類型後加上一個問號「?」就ok囉
如: 下面String?類型的變數就可以保存字串或null值
var hp :Int = null //會出現紅色蚯蚓底線 var skill :String? = null //沒問題會出現紅色蚯蚓底線的原因,是由於Kotlin是一門編譯型語言,程式碼會先編譯成機器語言指令,再由一個編譯器這個特殊程式執行。在編譯階段,編譯器會先檢查程式碼是否符合特定要求,確認無誤後再編譯成機器指令。
所以我們把null指派給非空的hp變數,Kotlin就會拒絕編譯,這類在編譯期捕獲的錯誤叫做編譯時期錯誤。
雖然是錯誤但是這是工程師在編輯程式碼的當下馬上可以修正的錯誤,比執行後回報異常錯誤再來抓蟲除錯,這樣的錯誤成本是小多了。
null安全現在我們要對一個可空的變數呼叫其他函數,一樣會發生編譯錯誤。 點一下readLine(...
Null (編程) | 魚的世界
補救null 的策略 | 魚的世界
Null (程式設計) | 魚的世界
Null (程式設計) | 魚的世界
安裝Null 驅動程式 | 魚的世界
補救null的策略 | 魚的世界
C 語言常見誤解指標空指標與NULL | 魚的世界
第24天Kotlin小學堂(13) | 魚的世界
「NULL」宜蘭河(宜蘭溪)壯圍大橋 2019/2/14 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/2/14上午12:00:00 在宜蘭河(宜蘭溪)壯圍大橋發現,以下為該物種詳細資訊...
「NULL」蘭陽溪噶瑪蘭橋 2018/7/19 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2018/7/19上午12:00:00 在蘭陽溪噶瑪蘭橋發現,以下為該物種詳細資訊:物種中...
「NULL」口隘溪圓潭橋 2019/4/16 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/4/16上午12:00:00 在口隘溪圓潭橋發現,以下為該物種詳細資訊:物種中文...
「NULL」大礁溪新城橋 2019/8/22 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/8/22上午12:00:00 在大礁溪新城橋發現,以下為該物種詳細資訊:物種中文...
「NULL」武鹿溪口社大橋 2019/9/3 上午 12:00:00 出沒
NULL(Ceramopeltalatirostris)為鱉科魚類,於2019/9/3上午12:00:00 在武鹿溪口社大橋發現,以下為該物種詳細資訊:物種中文...
「NULL」五十溪茄苳林 2019/2/12 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/2/12上午12:00:00 在五十溪茄苳林發現,以下為該物種詳細資訊:物種中文...
「NULL」美濃溪東門橋 2019/4/16 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/4/16上午12:00:00 在美濃溪東門橋發現,以下為該物種詳細資訊:物種中文...
「NULL」五十溪茄苳林 2019/5/7 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/5/7上午12:00:00 在五十溪茄苳林發現,以下為該物種詳細資訊:物種中文名...
「NULL」五十溪茄苳林 2019/10/4 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/10/4上午12:00:00 在五十溪茄苳林發現,以下為該物種詳細資訊:物種中文...
「NULL」宜蘭河(宜蘭溪)中央大橋 2019/5/9 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/5/9上午12:00:00 在宜蘭河(宜蘭溪)中央大橋發現,以下為該物種詳細資訊:...
「NULL」安農溪分洪堰人行橋 2018/11/9 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2018/11/9上午12:00:00 在安農溪分洪堰人行橋發現,以下為該物種詳細資訊:物...
「NULL」花蓮溪出海口 2017/4/25 上午 12:00:00 出沒
NULL(Diodonholacanthus)為二齒魨科魚類,於2017/4/25上午12:00:00 在花蓮溪出海口發現,以下為該物種詳細資訊:物種中文名...
「NULL」宜蘭河(宜蘭溪)壯圍大橋 2019/10/5 上午 12:00:00 出沒
NULL(Hippichthysluzonica)為海龍科魚類,於2019/10/5上午12:00:00 在宜蘭河(宜蘭溪)壯圍大橋發現,以下為該物種詳細資訊:...
「NULL」大湖溪尚德橋 2019/2/13 上午 12:00:00 出沒
NULL(Rhinogobiusbrunneus)為鰕虎科魚類,於2019/2/13上午12:00:00 在大湖溪尚德橋發現,以下為該物種詳細資訊:物種中文名...
「NULL」口隘溪圓潭橋 2019/6/18 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/6/18上午12:00:00 在口隘溪圓潭橋發現,以下為該物種詳細資訊:物種中文...