首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
木子hj
湖南工学院 Java
发布于湖南
关注
已关注
取消关注
@程序员鱼皮:
这些代码,差点把我气出内伤
大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。举个夸张的例子:让你实现 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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-02 11:09
万得信息_数据算法工程师(准入职员工)
图拉斯内推,图拉斯内推码
ai面总结:AI调教的很好,问的问题很有意思,整场面试不会有很大的压迫感,追问大多是根据你的回答提问。总时长:35分钟Q1:自我介绍,重点介绍一下个人背景和大学期间的主要经历。Q2:你对于在一家公司长期发展有什么看法?你认为哪几点因素会让你在一家公司长期工作?(有追问)Q3:你取得过的最大成就是什么?过程中最大的难点是什么?你是如何突破的?最终的结果怎么样?(有追问2个)Q4:请描述一个过往遇到的最有压力困难或最具挑战的一个场景,你是如何解决的?对你有什么影响?(有追问)Q5:依你的看法,请描述一个你近期完成的项目任务,如果重来一次,你会做哪些不同的事情来提升结果?(有追问2个)Q6:电商运营...
点赞
评论
收藏
分享
12-05 11:41
基恩士_销售工程师(准入职员工)
基恩士内推,基恩士内推码
问题(面试刚开始会让做一个自我介绍,可以提前准备一下) 1.我是如何实现一周涨粉5000+的? 这个问题是根据经历上面的经验提问的 我简单回答了一下 选题策划-AB测试-评论转换-账号定位一些内容 2.为什么开始这个小红书运营项目? 其实这是老师布置的小组作业 我回答:有项目想法-调研后熟悉小红书规则等等 3.在运营账号过程中有没有低谷期或者困难你是怎么解决的? 这个问题的核心:就是问你遇到困难是如何解决的? 4.你有没有向他人推销产品的经历?如果有你是如何推销的? 这个我刷到收到面试的同学好像都问了 这个问题必须准备,好好回答是一个必答题 5.你推销产品时其他人是什么反应? 我当时的回答是“...
点赞
评论
收藏
分享
11-19 18:44
已编辑
成都理工大学 Java
27届acm银牌退役选手找不到实习
有没有佬锐评一下简历编写,boos投简历都很少有回复,有没有佬介绍一下
程序员花海:
我面试过100+校招生,大厂后端面试不看ACM,竞赛经历含金量低于你有几份大厂实习 这个简历整体来看不错 可以海投
如何写一份好简历
点赞
评论
收藏
分享
11-16 21:21
中国矿业大学徐海学院 Java
鼠鼠想找一个寒假实习,简历求大佬给点建议
点赞
评论
收藏
分享
12-02 16:00
已编辑
门头沟学院 Java
越亮传奇实习一面
线下面会议室进来三个人一起拷打实习经历拷打以及实习项目展示Linux常用命令缓存穿透消息队列的使用场景(实习经历写得很水于是问项目经历)项目经历拷打面试官介绍业务(面试官之间交流时发现简历被捞是因为写了svn。。。)
查看4道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
7天10面 来分享一下我的11月面筋!
3148
2
...
零经验也能斩获实习offer
1311
3
...
27届211本 百度测开实习要去吗
1049
4
...
26岁的我,后悔读双非硕士
1001
5
...
小红书商业化技术Java一面(挂)
837
6
...
快手日常实习能转正吗?
799
7
...
我觉得年轻就应该选择"高薪高压" | 技术至上、业务为王.
787
8
...
试用期没通过
737
9
...
都是匆忙的选择,感觉人生真的很儿戏
684
10
...
数字马力-AI工程研发工程师-1面技术面-11月28日
602
创作者周榜
更多
正在热议
更多
#
offer帮选
#
4806631次浏览
29187人参与
#
0经验如何找实习?
#
654次浏览
24人参与
#
百融云创求职进展汇总
#
877次浏览
6人参与
#
校招薪资来揭秘
#
346707次浏览
1896人参与
#
你开始找寒假实习了吗?
#
1184次浏览
16人参与
#
OC/开奖
#
281080次浏览
1748人参与
#
如果公司降薪,你会跳槽吗?
#
108131次浏览
670人参与
#
跳槽时有那些注意事项
#
113118次浏览
581人参与
#
实习,不懂就问
#
134663次浏览
1247人参与
#
2025年终总结
#
19541次浏览
281人参与
#
你会为了工作牺牲生活吗?
#
64279次浏览
433人参与
#
第一份工作能做外包吗?
#
88370次浏览
588人参与
#
硬件兄弟们 甩出你的华为奖状
#
117871次浏览
702人参与
#
Offer比较,你最看重什么?
#
241744次浏览
1491人参与
#
产品每日一题
#
72035次浏览
638人参与
#
学历or实习经历,哪个更重要
#
204084次浏览
1085人参与
#
职场新人体验
#
152651次浏览
1110人参与
#
uu们,春招你还来吗?
#
17253次浏览
113人参与
#
Offer比较,求稳定还是求发展
#
69144次浏览
280人参与
#
25届暑期实习
#
1029861次浏览
20515人参与
#
哪一瞬间让你觉得“这班不如不上”
#
14188次浏览
175人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务