首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
聪敏的卡尔在开会
郑州大学 前端工程师
发布于北京
关注
已关注
取消关注
@程序员鱼皮:
这些代码,差点把我气出内伤
大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。举个夸张的例子:让你实现 1 + 1 的求和自己写:let sum = 1 + 1;某烂代码可能是:let a = {};let b = {};a.toString = function() { return 1;};b.valueOf = function() { return "1";};let sum = a + b;把简单的逻辑搞复杂,便是绝大多数程序员的拿手好戏(当然也包括我)。因为我从大学就开始带团队做项目了嘛,所以经常会审查团队同学的代码,做好二次校验。包括现在虽然开公司了,前端 / 后端同学的代码,也都会在我这过一遍才会发布上线。总之算是看了很多代码,其中有一些真的是让我哭笑不得。下面给大家分享一些代码片段出来,希望大家 不要学习 。1、过于抽象的命名还记得咱们刚学编程的时候,变量的命名都是用的 abcdefg。自学时这么写完全没问题,但是在实际项目中,如果还用过于抽象的命名,那就不太合适了。比如下面这段,大家能看懂是什么意思么?const [l, setL] = useState<boolean>(false);const [d, setD] = useState<any>();但如果我稍微完善下命名呢:const [loading, setLoading] = useState<boolean>(false);const [data, setData] = useState<any>();很多同学应该立刻能看懂了,一个是 “加载中” 的变量,一个是 “存储数据” 的变量。最好的代码应该是不用写注释的,因为 代码即注释 。如果你能把命名做到 “见名知义”,看代码的人会极度舒适。2、有深度的代码比如下面这段:if (condition1) { // 逻辑 A if (condition2) { // 逻辑 B if (condition3) { // 逻辑 C if (condition4) { // 逻辑 D } } }}这里的深度有 2 重含义,一重是字面意思:代码一层嵌一层、深不见底;另外一重是指真的 “很有深度” —— 指让人看不懂。阅读这段代码的感觉就像是你在一座巨大的迷宫里,每次转弯都要判断下是左还是右,最后你只会迷失方向。如何改进呢?最简单直接的方法就是使用早返回策略(early return):if (!condition1) // 逻辑 A return;if (!condition2) // 逻辑 B return;if (!condition3) // 逻辑 C return;if (!condition4) // 逻辑 D return;这样,你的代码就清晰了很多,阅读这种代码的感觉就像是走在了一条直路上,前方的路一目了然。当然,还可以将一些逻辑抽象成独立函数来简化代码,或者使用设计模式来优化。怎么判断一段代码是否过于复杂、应该优化了呢?这里提到一个概念: 圈复杂度 ,这是一种量化代码复杂程度的概念。通常你代码中的 if else 分支越多,圈复杂度就越高,代码就越复杂。企业中一般建议圈复杂度不要超过 10 - 15,我个人的编码习惯是一般不会在代码中出现 3 层以上的嵌套(除非必要)。3、冗余代码这是我遇到最多的问题!分为 3 种情况:能用一行代码搞定,偏偏要写 10 行能用一个变量或函数搞定,偏偏每次都是复制粘贴重复写没有用到的代码,又不舍得删除举个例子,下面这段前端代码,大家觉得有什么问题:这是我们鱼聪明 AI 前端开发过程的真实代码<Spin spinning={!(currDownloadUrl || originPictureUrl || pictureUrl)}> {type === DRAW_APP ? ( drawImg(image) ) : ( drawImg(currDownloadUrl || originPictureUrl || pictureUrl) )}</Spin>第一眼看到这段代码时,我就发现了,判断 spinning(旋转)的代码逻辑比较复杂,包含了两个 || 逻辑。而下面的 drawImg 函数的参数中,又包含了这段一模一样的逻辑。这段判断,其实就是冗余代码,完全没必要写两遍!我调整过后的代码如下:// 要展示的图片地址const showPictureUrl = currDownloadUrl || originPictureUrl || pictureUrl;直接定义一个通用变量,写上清晰的注释,其他地方要使用时就无需关注内部判断逻辑,看注释就行了。这就是所谓的 DRY 原则(Don't Repeat Yourself) ,尽量避免代码冗余。如果你在多处写下相同的代码,那么当需要修改这段代码时,你就需要在所有这些地方都修改,漏一个地方就是一个 Bug。还有,关于项目中没有用到的函数和变量,如果你近期没有使用计划,不妨就删除或者注释掉,别舍不得。利用好 Git 版本控制系统,只要你的代码提交信息写得好,要用到被删掉的历史代码时,去提交记录里找即可。注意,如果是学习时写代码,多保留一些也是合理的。但企业项目中,项目代码精简凝练些会更好。这里打个比方,写代码就像是我在公司里堆东西,一开始总觉得多一点没关系,反正有空间。但是,冗余代码就像是杂物,会越堆越多,迟早有一天,会影响到你,就像我们公司现在一样(右边有一堆杂物):大概就分享到这里,请大家在评论区 @ 出你写烂代码的同事吧 🐶 ~
点赞 135
评论 17
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
11-11 23:53
中国地质大学(武汉) Java
字节飞书后端日程实习
10.11一面只有两道算法题给定grid,找出从左上角到右下角的最小累积和,dp,限时10min给定11张麻将,判断是否胡牌,能看出来是回溯,但没想到先把一个对子找到,再对剩下的回溯,没写出来,限时20min本来以为挂了,结果面完一分钟就约了二面10.12二面讲实习模糊查询算法(没具体看过,问我你有什么思路)mysql索引redis常见数据结构使用和内部实现场景题,面对高并发系统,如何做到服务器不被冲垮(理解成如何瞬时处理特别多请求,只答了限流算法,后来想到应该讲讲分布式什么的)算法题,给定一个数,给定一个个位数数组,如(1,2,8),求出由数组中的个位数组成的,小于给定数的最大值,回溯二十多...
查看5道真题和解析
点赞
评论
收藏
分享
11-06 00:50
南昌大学 Java
是完全的幸存者偏差还是大厂真的并不遥远?
牛客上的人怎么都这么厉害,不管有没有拿到offer,感觉来发帖水平都不差的,还有很多人一堆大厂实习,让我感觉自己也行了。虽然现在哪哪都不行,但应该很快就能学个差不多,可是开始的真的太晚了,但凡我从暑假开始学,现在我就能有找实习的水平,可惜没有如果,开始晚的后果就是只能错过一次又一次机会,不知道等我学个一两个月还有没有实习了。
程序员卤馆:
首先大厂日常不是特别遥远,其次你才刚开始你就觉得自己有机会进大厂了??我所知道的别人26进大厂的去年就开始努力了
没有实习经历,还有机会进大厂吗
点赞
评论
收藏
分享
10-29 20:07
西安工业大学 C++
26想找个实习,求大佬看看
香梨想要offer:
人手一个muduo
点赞
评论
收藏
分享
11-01 17:40
门头沟学院 护士
秋招结束
赛子 已签 莫辜负!离家近+薪资还行 #禾赛科技#
感性的干饭人在线蹲牛友:
🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞
评论
收藏
分享
11-06 23:55
中山大学 通信电源工程师
华为的校招还有人没投递吗?
我每周的邮件进展都是倒数,拓源人数、面试通过率,统统都是倒数!我每天都在焦虑,其他部门几乎都停止拓源了,只有我还在苦苦挣扎。机考挂掉的太多,前期投递的同学已经走得远远的,我是真怕招不满!每周的进展都让我很难受!
ajva糕手:
老哥,干工程师还让你出来招人的吗,压力这么大
投递华为等公司10个岗位 >
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
秋招惨淡收场,我终于“认清了自己的定位”。
1.9W
2
...
接到满意的offer,真是太开心了!
8718
3
...
嵌入式学习路线
6325
4
...
高强度?高提升?快手实习感受
4711
5
...
报告,已经有5位数存款了!
4511
6
...
虾皮开了能不能戳一下
4110
7
...
美团开奖
3512
8
...
全志科技三面
3280
9
...
秋招暂停,我将对以下公司做出处罚:
2986
10
...
再再次许愿快手开个sssssssp!!!
2921
正在热议
#
25届秋招公司红黑榜
#
147543次浏览
679人参与
#
机械制造薪资爆料
#
842440次浏览
7144人参与
#
许愿池
#
186078次浏览
2339人参与
#
同bg的你秋招战况如何?
#
59346次浏览
459人参与
#
非技术投递记录
#
453722次浏览
5590人参与
#
我的实习求职记录
#
5883041次浏览
82224人参与
#
快手工作体验
#
126477次浏览
1961人参与
#
如果再来一次,你还会选择这个工作吗?
#
41011次浏览
536人参与
#
非技术求职现状
#
123088次浏览
975人参与
#
总结:哪家公司面试体验感最好
#
18275次浏览
75人参与
#
国央企笔面经互助
#
67273次浏览
781人参与
#
制造业的秋招小结
#
43904次浏览
1116人参与
#
如何一边实习一边秋招
#
950159次浏览
12189人参与
#
哪些公司校招卡第一学历
#
29670次浏览
73人参与
#
牛友投递互助,不漏校招机会
#
201771次浏览
3004人参与
#
打工人的工作餐日常
#
10298次浏览
110人参与
#
你喜欢工作还是上学
#
19392次浏览
190人参与
#
不考虑薪资和职业,你最想做什么工作呢?
#
27032次浏览
232人参与
#
25届秋招总结
#
97681次浏览
974人参与
#
虾皮求职进展汇总
#
66000次浏览
548人参与
牛客网
牛客企业服务