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

看板Soft_Job作者 (guest)時間11年前 (2014/09/14 19:30), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串19/21 (看更多)
※ 引述《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); 以上四個結果你自己去跑一下,當然案例二我真的是純搞笑, 但不要你周遭的人還真的發生過這樣的事件..那我就無言了。 你就知道括弧的差異了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.33.32 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1410694240.A.C06.html

09/14 19:57, , 1F
我的文字是在瞭解這種差異下提出的。
09/14 19:57, 1F

09/14 21:47, , 2F
唉...別再假裝自己很懂了..
09/14 21:47, 2F

09/15 11:13, , 3F
function名稱訂好一點不就好了??
09/15 11:13, 3F

09/15 22:31, , 4F
retrun?
09/15 22:31, 4F

09/16 14:41, , 5F
七成的情況後面的人還是要去追funA有什麼side effect
09/16 14:41, 5F

09/16 14:43, , 6F
除非func name一目了然而且可以信任 而如果這件事成立
09/16 14:43, 6F

09/16 14:43, , 7F
那有沒有多那個==true也無關緊要了
09/16 14:43, 7F
文章代碼(AID): #1K5NnWm6 (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 19 之 21 篇):
文章代碼(AID): #1K5NnWm6 (Soft_Job)