[心得] 真的很討厭null

作者: wind681201 (阿風~~)   2017-05-05 22:54:45
null這個東西,真的是很討厭,雖然它叫做連空白也沒有。
但,沒有就沒有,幹麻報錯。
舉個例來說:
我有一個 class 叫person ,裡面有人名,年紀二個欄位
若我查詢 人名叫josn 的就怎樣怎樣。
假設這個person是null
if(person.name == "josn"){怎樣。}
就錯,為什麼不直接跳過去就好,因為我只是判別呀。
而非要寫成
if(person != null && person.name == "josn"){怎樣。}
就這樣,就要多幾個字,很討厭
由上面的例子,person 是null 那在person.name 當然就不可能為josn,就
跳過去就好,幹麻要報錯。
由其是dictionary物件,為了安全,非要一個containskey,先看有沒有再處理。
作者: yeo1987 (Archie)   2017-05-05 23:01:00
可改用person?.name == "json" / Dictionary.TryGetValuejosn, 打錯=.=
作者: wind681201 (阿風~~)   2017-05-05 23:09:00
若person是null,name也是null的話,就沒辦法了吧tryGetValue,是好一點,但還是不能直接用就是還是要多一層判別
作者: vi000246 (Vi)   2017-05-06 00:03:00
https://goo.gl/s2pXbR原來一樓有貼了不然就用try{...} catch(){} 略過exception就好
作者: e23882 (呆呆要不要買降有)   2017-05-06 01:45:00
NullReferenceException
作者: ssas1115577 (Holey)   2017-05-06 02:31:00
邏輯問題,就像是我想透過看我錢包這個動作來看我還有多少錢,但其實我根本沒有錢包
作者: IKAFIRE (沒有)   2017-05-06 11:22:00
拜託不要用try catch做這種簡單的判斷
作者: james732 (好人超)   2017-05-06 11:46:00
同一樓,用?應該可以簡化
作者: skitty (aki)   2017-05-06 21:59:00
.ToString
作者: testPtt (測試)   2017-05-07 00:23:00
那你就不要讓他null不就好了
作者: jizang (阿魯米)   2017-05-07 00:42:00
宣告馬上給初始值。
作者: ssccg (23)   2017-05-07 02:59:00
沒有值就是null,不是什麼東西都適合有初始值是說 ?. 已經很方便了啊
作者: bizer (bizer)   2017-05-07 04:39:00
沒有人又怎會有名子,寫程式本來最好就嚴謹點,bug才比較少
作者: vi000246 (Vi)   2017-05-07 10:55:00
查到一個GetValueOrDefault()可以試試
作者: jizang (阿魯米)   2017-05-07 11:22:00
給初始值 String.Empty 是一種習慣!編譯器都會給警告~
作者: wind681201 (阿風~~)   2017-05-07 17:49:00
其實理論我懂,只是覺得null 不等於json幹麻要報錯
作者: vi000246 (Vi)   2017-05-07 19:32:00
不然寫個擴充方法好了http://imgur.com/JIbNeXk只是正確的解法應該是呼叫前就要判斷null
作者: wind681201 (阿風~~)   2017-05-07 20:36:00
謝謝~~~
作者: Litfal (Litfal)   2017-05-07 20:54:00
3F在說什麼...name也是null又怎樣?
作者: uranusjr (←這人是超級笨蛋)   2017-05-08 02:30:00
請愛用 null object pattern, 或改寫 Objective-C
作者: soheadsome (師大狗鼻哥)   2017-05-08 18:16:00
用optional啊
作者: s4300026 (s4300026)   2017-05-08 18:37:00
只有我喜歡null嗎? 我一直困擾著沒有任何東西代表沒有東西,就像是-1與1之間的 “沒有”般的喜愛,與其自己定義,倒不如有個固定的東西可以指派。 舉例來說,如果你要求輸入自然數為變數,你可能會在意沒有輸入值的情況,或許任何負數都可以代表這個情形,但你不覺得交由null是更好的一件事情嗎?
作者: ssccg (23)   2017-05-08 20:44:00
不要跳exception的話就很好
作者: outofyou   2017-05-10 00:47:00
想過這個問題,覺得讓((person)null).name == (string)null好像可以,但又不想自己寫compiler,所以發現C#有?.的語法時有驚喜到。但dictionary會分不清d[key].value==null及d[key]==null上一句錯了,dictionary確認有沒有此key很正常吧
作者: jinmin88 (晝伏夜出)   2017-05-11 04:56:00
相信我 如果沒null可用某些狀況下你會更想哭
作者: s89227 (Kei)   2017-05-12 21:12:00
遇到NullException表示你的邏輯設計有問題,Compiler才討厭你吧,好心提醒你沒好報!
作者: ssccg (23)   2017-05-13 06:24:00
null exception是runtime的吧? 跟compiler有關係?
作者: s89227 (Kei)   2017-05-15 01:31:00
……對欸,我腦袋一時糊塗了,謝謝樓上提醒QQ
作者: AizawaYuuiti ( )   2017-05-19 14:58:00
當person == null的時候,別說person.name是否等於john了,person是無法讀取name屬性的一般來說我會先在外面判斷null,不是才進去做事是的話直接置底報錯或跳過,因為有時候null是代表那裏就是真的沒東西,而不是不是你要的東西如果你沒去檢查是否有舊的物件殘留,有時候會有邏輯上的盲點
作者: AWEN221 (Larry)   2017-05-31 14:45:00
不喜歡就自己覆寫運算子......等有天你自以為都有賦值CODE量又很多 就需要它報錯了

Links booklink

Contact Us: admin [ a t ] ucptt.com