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

作者: guest2008 (guest)   2014-09-07 03:16:25
※ 引述《workworkwork (Miyada vv)》之銘言:
: 這是我"前"公司的經驗了
: 一開始以為公司內有嚴格的coding style規定是件好事
: 我也贊成公司要有一致的coding style
: (像我以前看過apache的C code
: 全部CODE都像同一人寫出來的一樣)
: 而公司內也會有人code review你的部份
: 一切聽起來都很完美
: 一開始聽到有規定coding style和code reviewer也很開心
: 但因這一切都因為公司裡有一個奇怪的規定而毀了
: "code不可以用code formatter去掃"
: 我承認自己寫程式常會漏勾
: 所以寫完會花很多心力在檢查有沒有BUG 是否會被攻擊 資安問題等等....
: 但在這間公司發現一個很奇怪的事情
: "有資安漏洞的CODE大家會很有耐心的教 空格沒空好會被罵的狗頭淋頭"
: 搞到最後一段程式寫完我只知道檢查空格....
: 最後的最後我決定離職的原因是出在reviewer
: 和reviewer的code觀念差太多 跟本無法共事
: 例如:
: 1.
: 有時為了避免太多層出現===>
: if(a)
: {
: //do a things
: if(b)
: {
: //do b things
: if(c)
: {
: //do c things
: }
: }
: }
: 會改成====>
: if(!a)
: {
: return ;
: }
: //do a things
: if(!b)
: {
: return ;
: }
: //do b things
: if(!c)
: {
: return ;
: }
: //do c things
: 但因為這寫法code reviewer沒看過
: 她直接在辨公室裡開飆
這個我看起來 A 跟 B 根本沒什麼不同,但 B 確實比較糟糕。
因為都是 X條件觸發,處理 X條件,再繼續往下做。
但你是 X不成立,就返回。這個 !X 不是好方法,實際上對系統架構沒幫助。
你要讓系統結構很維護,避免那麼多{}層出現,
框到到底那個 } 是對應那個 { 都不知道了,應該這樣寫:
if(
fun_A() == true
&& fun_B == true
&& fun_C == true
&& .......
)
{
做某件事
}
function fun_A()
{
if(....) return(false);
return(true);
}
下略,自己補上 fun_B()..fun_C()。
這樣寫有啥好處??
(1) 最大好處就是太多層後,真的不知道那個 } 是對應那個 {
也就是你一直在數空格數到底空對了嗎?
(2) 除錯超快,注意我是直接每個判別直接寫一行,
你寫的落落長後,除非你是天下奇杷,腦袋超清楚,
要不然肯定會錯啦~~這個地方我除錯的速度絕對比你快。
我直接一行一行 // && fun_C() == true
就找出問題了。
甚至未來你某個條件不想再用就像上面一樣 mark 掉就好了。
以上給參考,你自己去評估三種寫法哪種最好。
另外如果有人又要出來跟我戰他要用 class 寫法最好,
還是說這個寫法糟透了,那是他家的事,我不出來應戰。
我只是恰好路過,出來建議一下而已。
作者: cc1plus (廢柴聯盟盟主)   2014-09-07 03:32:00
好的 ide 本來就可以看出有多少層.....
作者: guest2008 (guest)   2014-09-07 04:13:00
我都是以後續除錯跟修改看這件事. IDE可看出..但他無法辨識人的邏輯是否對, 未來要刪除某條件時,人可能會刪錯但IDE依然只能辨識相對應的{}數目對,但刪錯位置他不知
作者: cha122977 (CHA)   2014-09-07 04:15:00
1)根本不該弄錯... 2)if層數增加也是落落長啊...說!X不是好方法也太武斷 用來表示前題條件可是相當有用
作者: guest2008 (guest)   2014-09-07 04:21:00
1)會弄錯是因為他說每個條件成立後會"先做某事"再繼續如果純判斷不會做某事..後續要刪某條件,確實不會弄錯阿要先做某事..一堆落落長的 } 真的會刪錯.!X 是指整個框架而言, 不是指對 X 做反運算而言但他寫 if(!X)return; 表示他段程式碼是在某函數內..所以 !X 真的是比較不好的寫法. delphi 語言他的寫法是最前面寫 result := false, 如果全通過在 result:=true這裡重點是要討論架構..不是要討論 !X 好不好我指的架構是這三種寫法的比較,不是指我推文補充的事delphi的寫法 VS !X 那是題外話了.跟本文比較無關
作者: StubbornLin (Victor)   2014-09-07 05:58:00
guard condition 寫法很常見 沒有比較糟要 debug 跑 debugger 就好了
作者: robler (章魚丸)   2014-09-07 08:40:00
你太武斷了吧 這樣寫法沒有比較糟 你的寫法才會讓人看不懂
作者: jasonwoo (Syler)   2014-09-07 09:52:00
樓主的寫法比第一種還複雜且不好理解...
作者: StubbornLin (Victor)   2014-09-07 10:53:00
short circuit 其實有些陷井 有時不小處處理會出問題 與其用 short circuit...我寧可用 guard condition有踩過地雷就知道了就跟 the one true brace style 一樣而且 short circuit 還有一個問題要判斷哪幾個 expression 會被 evalute並沒有 guard condition 這麼直觀特別是 && || 混搭的時候 得想一下
作者: guest2008 (guest)   2014-09-07 11:17:00
我很討厭 條件||條件, 這部分程式碼超容易出錯,這除非是 sql 的code沒得改,只能用()去降低出錯要不然遇到 && || 混雜.."個人習慣" || 會特別處理再拿回來跟 && 運算
作者: CRPKT (crpkt)   2014-09-07 11:58:00
那叫做 guard condition/clause
作者: ACMANIAC (請肥宅救救肥宅)   2014-09-07 14:15:00
我會更不想看到你這種寫法...
作者: askacis (ASKA)   2014-09-07 20:43:00
沒有2可以按好難過~
作者: saxontai (黑暗,點綴孤零零的星)   2014-09-09 12:44:00
你根本完全沒搞懂第二種寫法的由來,跟 { } 視覺上對不對得上根本一點_關係都沒有
作者: godspeedlee (妳,我可以)   2014-09-09 19:00:00
老實說這點我支持原po,巢狀太深很難讀
作者: farlandx (Farland)   2014-09-12 15:06:00
2不是每個環境都會有好的IDE協助,巢狀太深很痛苦

Links booklink

Contact Us: admin [ a t ] ucptt.com