※ 本文轉寄自 ptt.cc 更新時間: 2024-07-24 21:24:02
看板 Soft_Job
作者 標題 Re: [請益] 痾 遇到這種事情 是不是需要趕快離職了?
時間 Tue Jul 23 14:58:09 2024
等等,我原本以為只是一個簡單的問題
居然歪樓了
推動coding conventions 可以從你我做起
像原原po的問題是
if
if
if
if
;
;
;
;
把判斷式改過來變成
if
return;
if
return;
即可
這個就簡單起草一份coding conventions
拿給長官review, 以後code review 看到這個問題
就直接貼連結請junior 改就好了
這種東西很多學生時期根本沒碰過
自然就會波動拳出現
跟頂不頂大沒關系
反而是senior 不知道怎麼幫助junior
才是問題
※ 引述《purin88 (原來我是憤怒的鄉民)》之銘言:
: 我從上面的文章只看到原po說有很多if...else跟function用原本的copy過來,改一下自
: 己想修改的code
: 但卻沒看到任何提到效率問題,而且if...else是O(1),並不會拖垮速度。
: 每個人寫code的習慣不一樣,
: 有的人喜歡這樣寫
: if() {
: }
: 有的人喜歡這樣寫
: if()
: {
: }
: 有的人喜歡程式碼短就連在一起
: if(...) cout << "xxx";
: else cout << "bbb";
: 也有人喜歡短的程式碼連在一起
: cout << "請輸入數字月份(1~12):"; cin >> month;
: 有的人喜歡命名用底線分開,如:month_arr
: 有些人喜歡用小寫大寫分開,如:monthArr
: 有些人不喜歡程式碼跟程式碼之間有空一行
: while {
: ....
: }
: if() {
: ....
: }
: for(int i = 0; i < N; i++) {
: ....
: }
: 但有些人喜歡有空一行
: while {
: ....
: }
: if() {
: ....
: }
: for(int i = 0; i < N; i++) {
: ....
: }
: 有人程式碼喜歡有空格分開
: for(int i = 0; i < N; i++)
: 有人不喜歡太多空格
: for(int i=0; i<N; i++)
: 以上這些都沒有錯,沒有誰的才是對的,誰才是錯的,重點流程有沒有錯,有沒有bug,
: 執行會不會慢,巢狀迴圈幾層。
: 執著在那些格式很沒有意義,或誰誰誰寫code格式不符合我意的,就把別人弄走。
: 你不能說你就是標準,全部人都要跟你的寫法一模一樣,很多人寫程式想的是這個問題要
: 怎麼寫才巧妙解決,而不是十分在乎格式,太執著就有強迫症或太龜毛,合作起來也很痛
: 苦。
: 放過別人也放過自己,互相尊重。
--
https://i.imgur.com/QDN9AhN.jpeg
紫楓創作:https://portaly.cc/tbpfs
我是AI王紫楓
你可以叫我AI王
也可以叫我AI王子
也可以叫我AI王子瘋
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.130.61 (臺灣)
※ 作者: tbpfs 2024-07-23 14:58:09
※ 文章代碼(AID): #1cdrI4Wu (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1721717892.A.838.html
推 : 遇到if-else完整陳述語法就沒辦法這樣偷吃步了1F 07/23 15:21
推 : Conventions?2F 07/23 15:55
→ : senior 最大的問題是 知識的詛咒3F 07/23 15:58
→ : 每個都有else就不能像你說的這樣改4F 07/23 16:14
→ : 真的遇到這種狀況只能把條件參數化再寫成其他形式,就像r
→ : oute一樣,但也有可能到最後你發現還是if else最好維護,
→ : 而且在某些很在意延遲的場景,if else更好
→ : 真的遇到這種狀況只能把條件參數化再寫成其他形式,就像r
→ : oute一樣,但也有可能到最後你發現還是if else最好維護,
→ : 而且在某些很在意延遲的場景,if else更好
→ : conversation8F 07/23 16:44
→ : 太多層就是 邏輯不夠明確 接手的人很痛苦
→ : 太多層就是 邏輯不夠明確 接手的人很痛苦
→ : 沒事找事,太閒10F 07/23 16:53
※ 編輯: tbpfs (123.205.130.61 臺灣), 07/23/2024 17:26:54※ 編輯: tbpfs (123.205.130.61 臺灣), 07/23/2024 17:26:59
→ : 靠邊 手指太肥了點到conversation XD11F 07/23 17:27
※ 編輯: tbpfs (123.205.130.61 臺灣), 07/23/2024 17:27:52※ 編輯: tbpfs (123.205.130.61 臺灣), 07/23/2024 17:28:15
→ : 我記得一個func裡多個return,這種方式不是不建議使用?12F 07/23 17:28
→ : 你說的可能是很久以前的寫法不建議使用13F 07/23 17:29
→ : 但現在為了readability, 都是用這種寫法
→ : 但現在為了readability, 都是用這種寫法
→ : early return現在還滿常見的15F 07/23 17:45
推 : 一個func多個return滿常在leetcode most vote 看到16F 07/23 17:46
→ : early return 還是要看一下返回的理由是什麼比較好.17F 07/23 18:09
→ : 一般的建議還是用在檢視輸入的資料有沒有符合規則.
推 : 然後,下面的例子有點極端 kubernetes裡的pc_controller.go
→ : 1714行,充滿if-else,作者一開頭就告訴你:別亂改,每個
→ : if-else都有意義.
→ : 以原發文的例子而言,有沒有可能,就是因為junior,為了避
→ : 免犯錯,才大量使用if-else去描述每一個路徑?
→ : 一般的建議還是用在檢視輸入的資料有沒有符合規則.
推 : 然後,下面的例子有點極端 kubernetes裡的pc_controller.go
→ : 1714行,充滿if-else,作者一開頭就告訴你:別亂改,每個
→ : if-else都有意義.
→ : 以原發文的例子而言,有沒有可能,就是因為junior,為了避
→ : 免犯錯,才大量使用if-else去描述每一個路徑?
推 : 如果不能return必須繼續做下去怎麼辦24F 07/23 19:14
→ : 我在c++裡面要解析json我都會先給一個if看欄位在不在
→ : 然後再一個if看到底是array還是object 再一個if看到底是
→ : 字串還是數字 最後才開始做事
→ : 我在c++裡面要解析json我都會先給一個if看欄位在不在
→ : 然後再一個if看到底是array還是object 再一個if看到底是
→ : 字串還是數字 最後才開始做事
推 : C++ json還要手寫parser?28F 07/23 19:40
→ : 沒看過程式碼真的別太篤定對錯。29F 07/23 19:51
推 : early return 感覺還比較適合多數情境,防呆機制比起30F 07/23 22:12
→ : 風格是更順暢的理由
→ : 風格是更順暢的理由
推 : 推這篇32F 07/23 23:49
推 : 推 剛入行也是針對這點有被前輩教育過33F 07/24 00:40
→ : 後來也有像是用枚舉或是switch 來取代 if else
→ : 只能說原 po可能有盡力 但不是當事人不好評論
→ : 後來也有像是用枚舉或是switch 來取代 if else
→ : 只能說原 po可能有盡力 但不是當事人不好評論
推 : 其實若if-else或switch裡面思路清楚 不會是個問題 而且就36F 07/24 00:51
→ : 我少少的經驗來說一但思路清楚 大概也不太會形成很深的
→ : if/switch 很難用例子去闡述那種if顯示出來的思路雜亂跟
→ : 跟理解/修改的困難(更難驗證邏輯正確性)
→ : @atst2 有可能是避免犯錯 但我也跟其他人一起討論當時案
→ : 例 一旦分析好狀況 可以寫出用少量的if/switch的同樣功能
→ : 也有分享給對方...比較難理解的是 下次遇到同樣需要分析
→ : 時 還是用同樣方式描述路徑是有點意外
→ : 補充:當然也不排除有上面提到的那種極端狀況. 至少不是現
→ : 在遇到的
→ : 我少少的經驗來說一但思路清楚 大概也不太會形成很深的
→ : if/switch 很難用例子去闡述那種if顯示出來的思路雜亂跟
→ : 跟理解/修改的困難(更難驗證邏輯正確性)
→ : @atst2 有可能是避免犯錯 但我也跟其他人一起討論當時案
→ : 例 一旦分析好狀況 可以寫出用少量的if/switch的同樣功能
→ : 也有分享給對方...比較難理解的是 下次遇到同樣需要分析
→ : 時 還是用同樣方式描述路徑是有點意外
→ : 補充:當然也不排除有上面提到的那種極端狀況. 至少不是現
→ : 在遇到的
推 : 我之前被review也是被教early return46F 07/24 01:30
推 : 請愛用策略工廠47F 07/24 01:37
推 : 你邏輯沒理清楚才會覺得 if else 是 must48F 07/24 06:24
→ : 怎麼會有人問必須做下去該怎麼辦…OMG…
推 : Guard Clauses 跟 EAFP 有空可以去了解一下
→ : 怎麼會有人問必須做下去該怎麼辦…OMG…
推 : Guard Clauses 跟 EAFP 有空可以去了解一下
→ : 三小,就是會有if else must的狀況啊51F 07/24 07:43
推 : early return能提高程式碼的可讀性、維護性,而且52F 07/24 08:21
→ : 也可以減少不必要的計算資源
→ : 也可以減少不必要的計算資源
推 : 如果該函式的行為有清楚定義並做好單元測試,裡面if迴圈54F 07/24 10:14
→ : 複雜一點好像也還好。
→ : 複雜一點好像也還好。
→ : 不可能會有,另外寫一個 function 在那邊 early return56F 07/24 10:16
→ : 而已
→ : 不然你提出一個例子我們討論看看
→ : 這東西你最終只要注意是 Passing By Pointer 還是 Pass
→ : ing By Reference 你就能做出你要的東西了
→ : 而已
→ : 不然你提出一個例子我們討論看看
→ : 這東西你最終只要注意是 Passing By Pointer 還是 Pass
→ : ing By Reference 你就能做出你要的東西了
→ : 會寫成巢狀if 也可能是歷史造成的 前人寫 後人不敢動太大61F 07/24 12:37
→ : 你當然可以把內層的if-else拉出去另一個function取個名字62F 07/24 14:33
→ : 對於要trace整個狀況的開發者來說, 邏輯的複雜性沒有降低
→ : 有時候反而跳來跳去更痛苦
→ : 對於要trace整個狀況的開發者來說, 邏輯的複雜性沒有降低
→ : 有時候反而跳來跳去更痛苦
推 : guard clause 不是蠻基本的嗎65F 07/24 14:38
→ : guard clause, early return 都看情況不用在那邊文人相輕66F 07/24 15:51
推 : 五十步笑百步 一堆early return有比較好嗎67F 07/24 17:07
推 : 不好嗎? 哪個條件不要了就選起來刪掉就好,完全不用68F 07/24 18:13
→ : 研究那堆if else
→ : 研究那堆if else
→ : if else 還不是一樣選起來刪掉-.-70F 07/24 19:37
→ : 真值表畫出來就知道你early return不會讓複雜度降低只是
→ : 程式碼語法差異而已
→ : 真值表畫出來就知道你early return不會讓複雜度降低只是
→ : 程式碼語法差異而已
推 : 波動拳你怎麼選...73F 07/24 20:50
--
※ 看板: Soft_Job 文章推薦值: 0 目前人氣: 0 累積人氣: 3024
回列表(←)
分享