Re: [討論] 因為空格~我離開了一間公司

作者: guest2008 (guest)   2014-09-14 19:30:37
※ 引述《changyuheng (張昱珩)》之銘言:
: 我所知的語言,function 的 return 值可以滿足 condition 就不會再做多餘的比較。
: 例如
: if (funcA())
: 不會寫成
: if (funcA() == true)
: 請問這樣寫有什麼特殊原因嗎?
:
: return 應該是 statement,所以後面接的括弧是給 expression 用的。
: 但是 (true) 不就是 true 嗎?
上面兩種寫法對編譯器來說它都可以吃,沒問題。
為什麼這樣寫? 沒什麼:
一開始大家寫程式都一定是模仿書上的範例,全部的範例都這樣寫,
寫習慣也沒特別去注意(所以真的就是純習慣性問題而已,這才是真正的真相),
直到....。
程式寫多了,被很多莫名其妙你覺得不會錯的 bug 搞死,
除非你就是太單純真的只會寫一種程式語言,不會又要你寫
C/C++、PHP、JAVA、jquery......哩哩拉拉一大堆語言。
把敘述寫完整一點對你寫程式來說,真的花不了你幾豪秒鐘的,
但可以避免很多不必要的困擾。
例如 if( A || B ) ..... 跟寫 if( (A) || (B) )...
根本意思完全相同,但要是 A 是 複合詞,例如他是 2014 && 0xFF
你沒加括弧就會出現恐怖的錯誤,而且這個錯誤你的編譯器永遠也檢查不出來。
習慣性加 (),不管他多簡單都習慣加括弧,就可以減免你未來 debug 時間,
就這麼簡單而已,你要用你的寫法沒人說不行。
還有 if( funA() ) 寫 if( funA()==true) 通通都可以,但你的程式碼
交給後面維護的人,用後面的寫法,他可以只看這一行就夠了,
不需要回去看你的 funA() 到底是什麼碗糕,是返回 float 還是 bool 還是參照。
反正寫習慣了,也沒特別去注意,但真的避開了很多麻煩,
你要用你的寫法沒人說不可以,只要小心未來不要採到很深的隱藏地雷就好。
因為這些都會認為絕對不會錯,編譯器也絕對檢查不出來你真的要表達的意思,
他一定會 pass,但最後你會被搞死,尤其你要寫很多種程式語言,各種程式語言
又有一點點小小小小差異時,寫完整一點根本就不會錯。
我舉兩個案例,你自己去思考
案例一:
1.1 return(1);
return(99); ==> if( funA() == true)
if( funA() == 1 )
1.2 return(true); ==> if( funA() == true )
if( funA() == 1 )
案例二:
#define A (32+64)
#define B (32+64);
return A+1000;
return B+1000;
return (A+1000);
retrun (B+1000);
以上四個結果你自己去跑一下,當然案例二我真的是純搞笑,
但不要你周遭的人還真的發生過這樣的事件..那我就無言了。
你就知道括弧的差異了。
作者: changyuheng (張昱珩)   2014-09-14 19:57:00
我的文字是在瞭解這種差異下提出的。
作者: robler (章魚丸)   2014-09-14 21:47:00
唉...別再假裝自己很懂了..
作者: chatnoir (對不起)   2014-09-15 11:13:00
function名稱訂好一點不就好了??
作者: sulf (sulf)   2014-09-15 22:31:00
retrun?
作者: shadow0326 (非議)   2014-09-16 14:41:00
七成的情況後面的人還是要去追funA有什麼side effect除非func name一目了然而且可以信任 而如果這件事成立那有沒有多那個==true也無關緊要了

Links booklink

Contact Us: admin [ a t ] ucptt.com