補救null的策略 | 魚的世界
2013年3月1日—含糊的null與引發的問題不少程式語言中都有null觀念的存在,像是C++的NULL、Java的null、Python的None或Ruby的nil等,JavaScript甚至有兩種令人混淆的 ...
快速排序發明者、圖靈獎得主(Turing Award Winner)Tony Hoare,在QCon London 2009的《Null References: The Billion Dollar Mistake》演講摘要指出,null的使用已經造成無數的錯誤、弱點與系統當機,在過去四十年來,或許造就了價值數十億美元的苦難與損失。
長久以來,不少語言亦採用了null的觀念與類似特性,多數程式庫亦常見null的蹤跡,開發者也常不假思索地加以使用。然而在檢視過去犯下的錯誤同時,著實也累積了不少補救措施與設計,可用以避免null的繼續使用,或者是銜接既存的程式。
含糊的null與引發的問題 不少程式語言中都有null觀念的存在,像是C++的NULL、Java的null、Python的None或Ruby的nil等,JavaScript甚至有兩種令人混淆的undefined與null。
null的根本問題在於語意含糊不清,就字面來說,null可以是「不存在」、「沒有」、「無」或「空」的概念,在應用時,總是令人感到模稜兩可,也就讓開發者有了各自解釋的空間。當開發者想到「嘿!這邊可以沒有東西……」就直接放個null,或者是想到「嗯!沒什麼東西可以傳回……」,就不假思索地傳回個null,然後使用者就總是忘了檢查null,引發各種可能的錯誤。
舉例來說,Java的Map在鍵/值部份都允許是null,而get()方法在指定的鍵不存在時,也是傳回null,這就形成一個很詭異的情況:如果使用Map的get()指定鍵為"SomeKey"時傳回null,那會是指"SomeKey"對應值為null呢?還是指Map中不存在一個鍵為"SomeKey"呢?
同樣是不存在,類似結構也常會有不同表現,例如ServletRequest在取得請求參數值時,會使用getParameter()方法並傳入請求參數名稱,這感覺像是Map結構;如果請求參數「不存在」呢?傳回null還是空字串?請求參數不存在到底是指沒有指定的請求參數名稱,或使用者沒有填值?
檢查值是否為n...
Null (編程) | 魚的世界
補救null 的策略 | 魚的世界
Null (程式設計) | 魚的世界
Null (程式設計) | 魚的世界
安裝Null 驅動程式 | 魚的世界
補救null的策略 | 魚的世界
C 語言常見誤解指標空指標與NULL | 魚的世界
第24天Kotlin小學堂(13) | 魚的世界
「NULL」美濃溪旗南橋 2019/6/18 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/6/18上午12:00:00 在美濃溪旗南橋發現,以下為該物種詳細資訊:物種中文...
「NULL」美濃溪東門橋 2019/6/18 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/6/18上午12:00:00 在美濃溪東門橋發現,以下為該物種詳細資訊:物種中文...
「NULL」大湖溪尚德橋 2019/2/13 上午 12:00:00 出沒
NULL(Rhinogobiusbrunneus)為鰕虎科魚類,於2019/2/13上午12:00:00 在大湖溪尚德橋發現,以下為該物種詳細資訊:物種中文名...
「NULL」霄裡溪霄裡橋 2019/10/1 上午 12:00:00 出沒
NULL(Poeciliahelleri)為花鱂科魚類,於2019/10/1上午12:00:00 在霄裡溪霄裡橋發現,以下為該物種詳細資訊:物種中文名稱:N...
「NULL」花蓮溪出海口 2017/4/25 上午 12:00:00 出沒
NULL(Diodonholacanthus)為二齒魨科魚類,於2017/4/25上午12:00:00 在花蓮溪出海口發現,以下為該物種詳細資訊:物種中文名...
「NULL」武鹿溪口社大橋 2019/9/3 上午 12:00:00 出沒
NULL(Ceramopeltalatirostris)為鱉科魚類,於2019/9/3上午12:00:00 在武鹿溪口社大橋發現,以下為該物種詳細資訊:物種中文...
「NULL」花蓮溪懷客橋 2019/3/23 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/3/23上午12:00:00 在花蓮溪懷客橋發現,以下為該物種詳細資訊:物種中文...
「NULL」安農溪分洪堰人行橋 2018/11/9 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2018/11/9上午12:00:00 在安農溪分洪堰人行橋發現,以下為該物種詳細資訊:物...
「NULL」安農溪雙賢二號橋 2018/7/18 上午 12:00:00 出沒
NULL(Bryaninainana)為鰕虎科魚類,於2018/7/18上午12:00:00 在安農溪雙賢二號橋發現,以下為該物種詳細資訊:物種中文名稱...
「NULL」五十溪茄苳林 2019/10/4 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/10/4上午12:00:00 在五十溪茄苳林發現,以下為該物種詳細資訊:物種中文...
「NULL」口隘溪圓潭橋 2019/6/18 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/6/18上午12:00:00 在口隘溪圓潭橋發現,以下為該物種詳細資訊:物種中文...
「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/8/22 上午 12:00:00 出沒
NULL(Barbodessaranaorphoides)為鯉科魚類,於2019/8/22上午12:00:00 在大礁溪新城橋發現,以下為該物種詳細資訊:物種中文...
「NULL」口隘溪圓潭橋 2019/4/16 上午 12:00:00 出沒
NULL(Herichthyscitrinellus)為麗魚科魚類,於2019/4/16上午12:00:00 在口隘溪圓潭橋發現,以下為該物種詳細資訊:物種中文...