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

看板Soft_Job (軟體人)作者 (のヮの)時間11年前 (2014/09/07 04:52), 編輯推噓2(2016)
留言18則, 6人參與, 最新討論串5/21 (看更多)
用個現實的例子 http://ideone.com/gkEwk5 我是真的不知道這種寫法哪裡比較糟糕,希望有人可以指點 一步步走下來一目了然,發生問題 caller 也能知道是錯在哪裡 唯一我自己看不順眼的是那些 goto,不過 c 沒辦法做到 raii 似乎也只能這樣 相對的寫法 http://ideone.com/sJSdO9 雖然邏輯一樣,但是我覺得這縮排很醜,而且錯誤處理離出錯的地方太遠 我反倒更不喜歡看到一大堆 short circuit evaluation 以同一個例子來說 if ((socket(...) >= 0) && (bind(...) == 0) && (listen(...) == 0) && (accept(...) >= 0)) { ... } 當這段出問題的時候,有辦法馬上找出是哪個步驟造成的嗎 我比較笨,要我 debug 我可能會 1. 在 socket bind listen accept 裡面加 log 看是誰沒走進去 2. 把這個 if 拆開,分別看他們的回傳值 但是 1. 的情況也許我是用別人的 library,不一定能修改 用 2. 的作法我想結果自然而然會變成上面連結的形式 難道 debug 完再改回 short circuit evaluation 嗎 想和大大們討論看看 ※ 引述《guest2008 (guest)》之銘言: : ※ 引述《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 寫法最好, : 還是說這個寫法糟透了,那是他家的事,我不出來應戰。 : 我只是恰好路過,出來建議一下而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.100.94 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1410036749.A.6EF.html

09/07 06:13, , 1F
程式是人寫的不用太拘泥.寫log找bug寫法本來就沒錯.
09/07 06:13, 1F

09/07 06:17, , 2F
架構或者除錯法真的還是要看狀況而定怎樣處理.
09/07 06:17, 2F

09/07 06:18, , 3F
真的堅持某種方法才是不好. 我那種"排版寫法"比較適合
09/07 06:18, 3F

09/07 06:19, , 4F
獨立事件的判別式..獨立事件這樣寫確實開開關關較快
09/07 06:19, 4F

09/07 06:21, , 5F
有時候程式太複雜..不知道哪段出錯..過去的習慣都是
09/07 06:21, 5F

09/07 06:22, , 6F
加上 /* if...*/ 結果太多 /* /* 反而出問題
09/07 06:22, 6F

09/07 06:22, , 7F
這樣寫有時候可以把這整段全關閉..不需要加上一堆/* */
09/07 06:22, 7F

09/07 06:23, , 8F
只要加上 && 1 == 0 就可以關閉了
09/07 06:23, 8F

09/07 06:51, , 9F
善用debugger單步執行處理short circuit
09/07 06:51, 9F

09/07 07:03, , 10F
debugger不是萬能的..這socket案例真的寫log除錯會較快
09/07 07:03, 10F

09/07 07:07, , 11F
socket有時候是結束字元換行的問題..你去按F10按到發瘋
09/07 07:07, 11F

09/07 07:08, , 12F
這個問題都找不到.還有很多狀況log除錯都會比F10好用
09/07 07:08, 12F

09/07 08:12, , 13F
unit testing 配 log 除錯就很夠了
09/07 08:12, 13F

09/07 08:12, , 14F
不過開發的方式要稍微調整,不然unit testing做不出來
09/07 08:12, 14F

09/07 11:22, , 15F
debugger應該有expression evaluators吧?
09/07 11:22, 15F

09/07 13:10, , 16F
呃...你的ret值都已經把錯誤原因標出來了,會很難除錯嗎?
09/07 13:10, 16F

09/07 19:38, , 17F
我覺得,會認為這樣有問題,是因為把函數都拿來用做步驟使用.
09/07 19:38, 17F

09/07 19:39, , 18F
其實發生問題時,從格式來看,它應該會指出是哪一行.
09/07 19:39, 18F
文章代碼(AID): #1K2tGDRl (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1K2tGDRl (Soft_Job)