有一個懸崖
旁邊立個牌子-上面寫着-warning
隻有程式員掉下去了
Warning 就是潛在的問題
目前項目的warning log 大多數都是定義了變量但未使用,也有少量的代碼編寫問題。盡量減少warning,對于無法避免的warning ,可以添加#pragma warning disable屏蔽目前警告。但不能濫用,對于新出現的warning 要有針對的解決,盡量做到無 warning。通過檢視warning log 可以發現很多代碼問題,通過項目前100多個warning歸納如下:
命名 不能和unity 内置的名字重複,比如常見的name(會有警告),m_Name(會有報錯日志,曾經出現過UI沒辦法在編輯器裡關聯這個UI對象);
子類中命名函數和父類中函數一緻,注意需要改為override還是使用new 定義為子類新函數。
值類型對象是不需要和null進行比較的,因為傳回的永遠是true。作為if 條件的話,else語句永遠不會被執行到。
定義了很多變量,但沒有使用。特别是還通過邏輯處理給變量指派了,卻沒有使用。多餘的運算量。
代碼編寫注意,複制粘貼錯誤,無意義的定義指派。
int nTempIndex = nTempIndex = (nShowLayer - 1) % m_arrSamsaraGroup.Count;
注釋不需要的代碼時候,要注意前面定義并且不再使用的變量也要一起注釋掉,發否就會出現4 中的情況。
好多地方用了try{}catch(Exception e),卻沒有列印出exception内容。對于異常情況,能處理的盡量處理,是在不能處理了在用try / catch。參考
old:
int num = red_world_min_currency;
try
{
num = int.Parse(m_uiNeedAncientJadeInput.value);
}
catch (Exception e)
{
}
new:
int num = red_world_min_number;
if (m_uiRedBagNumberInput!= null)
{
if (!int.TryParse(m_uiRedBagNumberInput.value, out num))
{
num = red_world_min_number;
}
}
棄用的邏輯,在代碼中間直接return的。編輯器會報警告
warning CS0429: Unreachable expression code detected
要麼就注釋掉後面的代碼,如果不想注釋,那就加上 #pragma warning disable
代碼邏輯,false 與其他沒意義,這樣書寫會影響代碼閱讀性。
CommonDesigner.SetObjectVisable(m_aNearByReliveCDLabel.gameObject,false && !bInMirror);
通過查warning log 也可以發現問題。如下,log 為
The variable `tmpValue' is assigned but its value is never used
可以發現本意是用來做大小值交換的,卻沒有使用中間值交換,結果肯定是有bug的。
float tmpValue = 0;
if (fMinValue > fMaxValue)
{
tmpValue = fMinValue;
fMinValue = fMaxValue;
fMaxValue = fMinValue;
}
unity 有些api 并沒有跟版本更新api,會有警告log。