作者tbpfs (http://portaly.cc/tbpfs)
看板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 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1721717892.A.838.html
1F:推 labbat: 遇到if-else完整陈述语法就没办法这样偷吃步了 07/23 15:21
2F:推 chihlee5566: Conventions? 07/23 15:55
3F:→ stepnight: senior 最大的问题是 知识的诅咒 07/23 15:58
4F:→ brucetu: 每个都有else就不能像你说的这样改 07/23 16:14
5F:→ brucetu: 真的遇到这种状况只能把条件参数化再写成其他形式,就像r 07/23 16:17
6F:→ brucetu: oute一样,但也有可能到最後你发现还是if else最好维护, 07/23 16:17
7F:→ brucetu: 而且在某些很在意延迟的场景,if else更好 07/23 16:17
8F:→ shooter555: conversation 07/23 16:44
9F:→ shooter555: 太多层就是 逻辑不够明确 接手的人很痛苦 07/23 16:46
10F:→ ma721: 没事找事,太闲 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
11F:→ tbpfs: 靠边 手指太肥了点到conversation XD 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
12F:→ acer1832a: 我记得一个func里多个return,这种方式不是不建议使用? 07/23 17:28
13F:→ tbpfs: 你说的可能是很久以前的写法不建议使用 07/23 17:29
14F:→ tbpfs: 但现在为了readability, 都是用这种写法 07/23 17:29
15F:→ a3817001: early return现在还满常见的 07/23 17:45
16F:推 f821027: 一个func多个return满常在leetcode most vote 看到 07/23 17:46
17F:→ atst2: early return 还是要看一下返回的理由是什麽比较好. 07/23 18:09
18F:→ atst2: 一般的建议还是用在检视输入的资料有没有符合规则. 07/23 18:10
19F:推 atst2: 然後,下面的例子有点极端 kubernetes里的pc_controller.go 07/23 18:18
20F:→ atst2: 1714行,充满if-else,作者一开头就告诉你:别乱改,每个 07/23 18:19
21F:→ atst2: if-else都有意义. 07/23 18:19
22F:→ atst2: 以原发文的例子而言,有没有可能,就是因为junior,为了避 07/23 18:24
23F:→ atst2: 免犯错,才大量使用if-else去描述每一个路径? 07/23 18:25
24F:推 gino0717: 如果不能return必须继续做下去怎麽办 07/23 19:14
25F:→ gino0717: 我在c++里面要解析json我都会先给一个if看栏位在不在 07/23 19:15
26F:→ gino0717: 然後再一个if看到底是array还是object 再一个if看到底是 07/23 19:15
27F:→ gino0717: 字串还是数字 最後才开始做事 07/23 19:15
28F:推 abccbaandy: C++ json还要手写parser? 07/23 19:40
29F:→ DrTech: 没看过程式码真的别太笃定对错。 07/23 19:51
30F:推 karst10607: early return 感觉还比较适合多数情境,防呆机制比起 07/23 22:12
31F:→ karst10607: 风格是更顺畅的理由 07/23 22:12
32F:推 viper9709: 推这篇 07/23 23:49
33F:推 crazwade: 推 刚入行也是针对这点有被前辈教育过 07/24 00:40
34F:→ crazwade: 後来也有像是用枚举或是switch 来取代 if else 07/24 00:40
35F:→ crazwade: 只能说原 po可能有尽力 但不是当事人不好评论 07/24 00:41
36F:推 saladim: 其实若if-else或switch里面思路清楚 不会是个问题 而且就 07/24 00:51
37F:→ saladim: 我少少的经验来说一但思路清楚 大概也不太会形成很深的 07/24 00:51
38F:→ saladim: if/switch 很难用例子去阐述那种if显示出来的思路杂乱跟 07/24 00:52
39F:→ saladim: 跟理解/修改的困难(更难验证逻辑正确性) 07/24 00:53
40F:→ saladim: @atst2 有可能是避免犯错 但我也跟其他人一起讨论当时案 07/24 00:54
41F:→ saladim: 例 一旦分析好状况 可以写出用少量的if/switch的同样功能 07/24 00:56
42F:→ saladim: 也有分享给对方...比较难理解的是 下次遇到同样需要分析 07/24 00:57
43F:→ saladim: 时 还是用同样方式描述路径是有点意外 07/24 00:58
44F:→ saladim: 补充:当然也不排除有上面提到的那种极端状况. 至少不是现 07/24 00:59
45F:→ saladim: 在遇到的 07/24 00:59
46F:推 joeboy: 我之前被review也是被教early return 07/24 01:30
47F:推 neo5277: 请爱用策略工厂 07/24 01:37
48F:推 yamagishi: 你逻辑没理清楚才会觉得 if else 是 must 07/24 06:24
49F:→ yamagishi: 怎麽会有人问必须做下去该怎麽办…OMG… 07/24 06:27
50F:推 yamagishi: Guard Clauses 跟 EAFP 有空可以去了解一下 07/24 06:32
51F:→ brucetu: 三小,就是会有if else must的状况啊 07/24 07:43
52F:推 ssteves: early return能提高程式码的可读性、维护性,而且 07/24 08:21
53F:→ ssteves: 也可以减少不必要的计算资源 07/24 08:21
54F:推 bnd0327: 如果该函式的行为有清楚定义并做好单元测试,里面if回圈 07/24 10:14
55F:→ bnd0327: 复杂一点好像也还好。 07/24 10:15
56F:→ yamagishi: 不可能会有,另外写一个 function 在那边 early return 07/24 10:16
57F:→ yamagishi: 而已 07/24 10:16
58F:→ yamagishi: 不然你提出一个例子我们讨论看看 07/24 10:17
59F:→ yamagishi: 这东西你最终只要注意是 Passing By Pointer 还是 Pass 07/24 10:19
60F:→ yamagishi: ing By Reference 你就能做出你要的东西了 07/24 10:19
61F:→ chal: 会写成巢状if 也可能是历史造成的 前人写 後人不敢动太大 07/24 12:37
62F:→ brucetu: 你当然可以把内层的if-else拉出去另一个function取个名字 07/24 14:33
63F:→ brucetu: 对於要trace整个状况的开发者来说, 逻辑的复杂性没有降低 07/24 14:33
64F:→ brucetu: 有时候反而跳来跳去更痛苦 07/24 14:34
65F:推 sasoman: guard clause 不是蛮基本的吗 07/24 14:38
66F:→ sharek: guard clause, early return 都看情况不用在那边文人相轻 07/24 15:51
67F:推 Obama19: 五十步笑百步 一堆early return有比较好吗 07/24 17:07
68F:推 abccbaandy: 不好吗? 哪个条件不要了就选起来删掉就好,完全不用 07/24 18:13
69F:→ abccbaandy: 研究那堆if else 07/24 18:14
70F:→ brucetu: if else 还不是一样选起来删掉-.- 07/24 19:37
71F:→ brucetu: 真值表画出来就知道你early return不会让复杂度降低只是 07/24 19:39
72F:→ brucetu: 程式码语法差异而已 07/24 19:39
73F:推 abccbaandy: 波动拳你怎麽选... 07/24 20:50
74F:推 Csir: 我之前也看过一堆goto差点自焚 07/24 23:14
75F:推 abraxas: 坐等例子 07/25 00:07
76F:推 akito117: early return 在做防呆类型好用,可以简化if else,让 07/25 18:49
77F:→ akito117: 逻辑清楚一点。 07/25 18:49
78F:推 EricTao: 推楼上 不然光缩排就饱了 08/06 18:14