首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
不愿透露姓名的神秘牛友
07-02 18:35
请问!
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:
一个月有一个月的实习经历,三个月有三个月的实习经历
点赞
评论
收藏
分享
06-27 18:31
成都理工大学 C++
校招能给这么多?
“校招”、“3-5年经验”
飞花断音:
小公司招逆向的不要去,基本上都是搞黑灰产违法的东西
点赞
评论
收藏
分享
05-23 21:27
成都信息工程大学 网络安全
避坑
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:
不要做没有专业门槛的工作
点赞
评论
收藏
分享
05-29 11:38
浙江工业大学 嵌入式软件开发
求各位大佬们给给意见,这份双非简历如何,想应聘嵌入式的
牛客77313065...:
无敌,乱杀
投了多少份简历才上岸
点赞
评论
收藏
分享
06-27 23:04
已编辑
广东第二师范学院 前端工程师
我的校招终于是结束了
bg学院本,全栈选手,React/Go/NodeJS,网工专业结局:被实习公司收留,一家上海中厂,没有任何奇迹发生。秋招,拿了现在老东家给的实习offer,感觉比当时公司要大一些,就去了。春招只拿了两个offer,汇川和同程。汇川低的太离谱,虽然团队很想要我,hr再三想留住我,说了很多汇川培养人才的内容。但我实在没法接受这么低的工资。同程面试官很想要我,应该是和hr说了要我来,hr和我沟通说希望我放弃现在实习,来同程。但同程是强制要求实习,那万一我实习被裁了呢,我找谁说去。此时我在老东家实习了三个多月了,我不想前功尽弃。春招下半部分虽然一直捡漏,面了许多中大厂,但一直排序被挂,从未赢过。是的,...
桐原j:
学院本 不容易
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
高德-交易业务-Java日常-面经(OC)
6998
2
...
大家觉得测试还能活多久
4783
3
...
快手凉经
4319
4
...
毕业之后再也没人给我兜底了
4204
5
...
差点忘了以前是干嘛的,这个梗就是2025年最大的一坨
3610
6
...
工资还是得攒着
2633
7
...
女友问我为什么进字节后不理她了
2615
8
...
测试常见八股之快问快答24条
2424
9
...
字节暑期实习刚oc要不要去
2143
10
...
拒offer时hr很生气怎么办
2136
创作者周榜
更多
正在热议
更多
#
你觉得实习能学到东西吗
#
23280次浏览
535人参与
#
不考虑转正,实习多久合适
#
30337次浏览
137人参与
#
现代汽车前瞻技术研发急速编程挑战赛
#
23486次浏览
195人参与
#
秋招什么时候开投比较合适?
#
11931次浏览
223人参与
#
如何准备秋招
#
14320次浏览
272人参与
#
实习,不懂就问
#
34594次浏览
572人参与
#
发工资后,你做的第一件事是什么
#
66729次浏览
221人参与
#
软开人,秋招你打算投哪些公司呢
#
101567次浏览
956人参与
#
如果你有一天可以担任公司的CEO,你会做哪三件事?
#
28415次浏览
458人参与
#
运营人求职交流聚集地
#
141491次浏览
989人参与
#
大疆今年的机械笔试难吗?
#
41777次浏览
456人参与
#
每个月的工资都是怎么分配的?
#
18522次浏览
370人参与
#
你觉得现在还能进互联网吗?
#
5694次浏览
116人参与
#
预测一下26届秋招形势
#
30000次浏览
274人参与
#
你们公司几号发工资
#
19385次浏览
130人参与
#
25届如何提前做秋招准备?
#
171964次浏览
2482人参与
#
硬件应届生薪资是否普遍偏低?
#
72894次浏览
511人参与
#
晒一晒你收到的礼盒
#
70480次浏览
403人参与
#
米哈游工作体验
#
18001次浏览
117人参与
#
打工人的精神状态
#
54977次浏览
997人参与
#
高考出分的那一天,我__
#
18768次浏览
277人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务