[程式] 關於程式中發生的例外問題-Unity為例

作者: yan04870449 (楊伯)   2014-02-20 16:19:06
請教一下大家對Unity(C#)中的Exception都是怎麼的處理方法?
public class Car : MonoBehaviour
{
//車門的物件
public GameObject door = null;
void Start()
{
//從門物件中找到腳本,並關起門來
door.getComponent<Door>().Close();
}
}
以這段程式碼為例,在Unity之下可能在兩個地方發生
NullReferenceException,但是真的有必要在使用之前
去檢查物件或腳本取出來是不是為null嗎?
我之所以會這樣問是因為,Editor會在run time出錯的
時候告訴我哪邊發生Exception,堆疊會告訴我一切,這
樣我馬上就知道哪邊有問題,但是如果我寫了檢查變成
像下面這樣
void Start()
{
if(door == null)
Debug.Error("door is null");
var _Com = door.getComponent<Door>();
if(_Com == null) reutrn ;
_Com.Close();
}
我做了兩種例外的處理,第一種是拋Unity的Error,但這跟
Exception沒甚麼差別,Exception還不見了,變成一個"訊息"
第二種是不處理,就直接return避免跳Exception或是造成遊戲
異常的崩饋,但這樣就好像只是騙自己這邊沒問題一樣,但事實
上就是"車門沒關"....
但是兩種比較起來,好像都沒有比較好,還是說一般例外根本
不能這樣處理,是我觀念一直錯誤?
到目前為止,比較能說服我自己的想法就是保持原樣,因為我在開
發階段靠Exception跟堆疊很快就可以讓我找到問題,並且修改。
想跟大家討論在這方面都是怎麼處理?
作者: Ansaga (奈燦)   2014-02-20 16:42:00
try catch寫log
作者: Kagami3421 (卡加米)   2014-02-20 18:24:00
同樓上
作者: azureblaze (AzureBlaze)   2014-02-20 19:07:00
會丟exception就是有人幫你檢查了,自己先檢查沒意義如果是可以處理的就把他catch起來 不行就丟給editor吧
作者: killman (天下第一人)   2014-02-21 22:44:00
callstack不會告訴你是誰忘了把door assign值try catch和檢查如果沒做,只要一個人做錯資料全部人都停擺,你想選哪一種
作者: Ebergies (火神)   2014-02-22 20:10:00
我覺得你要先了解 Exception 的意義如果 door 在你的正常處理流程上會有 null 的可能性那麼你就該使用 if 去判斷至於如果它是不正常的, 那麼就在可以處理的人那裡 catch這個 "可以處理的人" 在開發期間通常都是 Unity Editor
作者: yan04870449 (楊伯)   2014-02-23 23:08:00
感謝E大,我想知道的就是您最後一句話,讓Editor來當catch是不是正常的,按你的說法,這似乎是合理的現象
作者: Ebergies (火神)   2014-02-25 17:26:00
要注意 "開發期間" 喔!

Links booklink

Contact Us: admin [ a t ] ucptt.com