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

作者: changyuheng (張昱珩)   2014-09-14 20:16:27
※ 引述《guest2008 (guest)》之銘言:
: ※ 引述《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);
: 以上四個結果你自己去跑一下,當然案例二我真的是純搞笑,
: 但不要你周遭的人還真的發生過這樣的事件..那我就無言了。
: 你就知道括弧的差異了。
這就看你的語言了,C 語言的 if statement 後面是接 boolean condition,
function 的 return value 若不是 boolean 本就不該不加 operator 直接放在這邊,
就算有很多人這樣放,也都是在確信能夠正確 branch 的情況下做的偷懶。
還有,什麼才是 true?
雖然 C99 用 macro 定義了 TRUE = 1,
但是 boolean condition 判斷的仍是 0 或非 0。
funcA() == TRUE 這樣的寫法變成是判斷 funcA() 回傳的是 1 或非 1,
是會讓人困惑的,
因為 == TRUE 和語言認為的 true/false boolean condition 不同,
語言認為的是 != FALSE。
比較好的寫法是 funcA() == 1。
作者: guest2008 (guest)   2014-09-14 20:38:00
其實你不要去當認真狂人..純拿來舉例的東西讓人能理解要表達的事而已..結果在雞毛堆裡求真理.兩個案例都是故意找有爭執的案例..這是蓄意的只是要表達多打幾個字元會避免不必要的麻煩而已
作者: rodion (r-kan/reminder)   2014-09-14 21:04:00
若funcA有好好命名 就不需要啥funcA()==true了個人喜歡看到 if (isAAA()) 勝過 if (isAAA() == true)在良好的命名之下 '==true' 個人覺得是累贅
作者: GoalBased (Artificail Intelligence)   2014-09-14 21:09:00
推樓上,而且不要回傳1\0來當true false更甚至是回傳個4來當true..
作者: changyuheng (張昱珩)   2014-09-14 21:12:00
一般沒有 boolean 的語言會用兩個邏輯反向來正規化。
作者: leicheong (睡魔)   2014-09-14 22:32:00
用IsX()很好, 實際上.NET framework內有很多這樣的method/field.
作者: askacis (ASKA)   2014-09-15 12:51:00
Linux世界裡function return 0代表正常返回,反而windows的code我常常看到別人用true=1 來回傳~
作者: uranusjr (←這人是超級笨蛋)   2014-09-15 18:51:00
有 boolean 的語言比較常看到回傳 true 當成功
作者: powerair   2014-09-16 00:47:00
我碰到B社的code function回傳 SUCCESS(0) FAILURE(1)ERROR(2) 一開始知道SUCCESS值為0時 嚇了一大跳所以不能寫 if(funcA()) 一定得寫 if(funA()==SUCCESS)
作者: changyuheng (張昱珩)   2014-09-16 08:49:00
if (funcA() == SUCCESS) 這種沒問題不會造成困惑
作者: shadow0326 (非議)   2014-09-16 14:47:00
我倒覺得SUCCESS為0比1更常見這又回到原原po問題一 原原po的寫法更適合用在SUCCESS為0時 if (funA()) err_handling(); 的寫法

Links booklink

Contact Us: admin [ a t ] ucptt.com