首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-15 09:50
魔门塔(苏州)科技有限公司_感知算法工程师(准入职员工)
momenta内推momenta内推
momenta自动驾驶C++日常实习一面面经流程时间线:3.25HR联系约一面3.25晚7点一面3.26早上通知一面通过约二面3.26下午5点二面3.27早上HR沟通入职时间,已OC。一面流程:无手撕50min1.自我介绍2.面试官介绍部门职责(不涉及算法开发,是否能接受)3.简历浅挖(面试官大概率不是规控方向的,对项目可能了解不多,后续了解到是电气背景的)(1)hybird启发项如何设计(2)介绍latticeplanner流程(3)项目中涉及哪些传感器,如何获取heading angle。4.一系列C++,Linux,ROS八股(只列出部分还记得的)1.听说过rvo嘛2.知道raii嘛,原...
点赞
评论
收藏
分享
10-04 11:53
商洛学院 后端工程师
公办学院二本 ,投了两个月简历了,还没有面试,uu们能帮我看一下是哪里的问题嘛,BOSS也是已读不回🥲。谢谢uu们
赛博小保安:
你这简历没啥大问题的,经历技能也足够了,问题应该就是出在出身了,学院本就是这样,HR忙着跟92的勾搭呢,哪有心思看我们这些双非😿😭
点赞
评论
收藏
分享
10-16 21:30
门头沟学院 前端工程师
字节秋招前端面经
讲一下react性能优化的手段,从大一点的方面 前端开发过程中怎么定位到哪个环节有性能问题 FCP是怎么计算的 useMemo useCallback ,这俩可以解决大部分问题吗 esModule 和commonJS 区别 为什么treeshaking 一定要使用esModule 介绍一下浏览器输入url到渲染页面的流程 重排和重绘有什么区别,从渲染策略上说明 浏览器缓存机制 目前前端都是单页面应用,html,js,css怎么设计其缓存策略最优 js中怎么准确判断变量类型,instanceof 原理 一个数据的原型是什么,怎么看他的原型 原型和原型链有什么区别 原型链终点是什么 介绍一下事件循...
查看21道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
10.19百度笔试
4723
2
...
【26秋招】我是如何从男模上岸大厂程序员----漫长沉淀的一线生机(3)
1655
3
...
字节 Coze 前端日常一面
1489
4
...
百度笔试A卷
1299
5
...
作业帮一面
1218
6
...
27双非成功闯进团子实习
1114
7
...
携程火车票oc
1045
8
...
我的秋招结束了
1034
9
...
选offer,就看这四点!
1014
10
...
永星互动UE客户端一面
1001
创作者周榜
更多
正在热议
更多
#
大厂VS公务员你怎么选
#
41631次浏览
508人参与
#
产品实习,你更倾向大公司or小公司
#
175314次浏览
1989人参与
#
未岚大陆求职进展汇总
#
21554次浏览
99人参与
#
发面经攒人品
#
2658880次浏览
36168人参与
#
一汽大众工作体验
#
11130次浏览
23人参与
#
26届秋招公司红黑榜
#
609次浏览
3人参与
#
智慧芽求职进展汇总
#
2850次浏览
5人参与
#
最难的技术面是哪家公司?
#
52717次浏览
880人参与
#
来聊聊机械薪资天花板是哪家
#
145782次浏览
804人参与
#
你现在会用到哪些AI技能?
#
11935次浏览
102人参与
#
关于提前批我想问
#
242181次浏览
2284人参与
#
你有哪些缓解焦虑的方法?
#
36071次浏览
829人参与
#
我的求职进度条
#
116037次浏览
1391人参与
#
我对___祛魅了
#
133816次浏览
743人参与
#
职场捅娄子大赛
#
428891次浏览
4161人参与
#
参加完秋招的机械人,还参加春招吗?
#
66897次浏览
596人参与
#
机械制造公司评价
#
147946次浏览
347人参与
#
机械人的工作环境真的很差吗
#
23254次浏览
117人参与
#
华为工作体验
#
233551次浏览
1285人参与
#
你还有多少年退休?
#
27740次浏览
192人参与
#
小马智行求职进展汇总
#
14470次浏览
50人参与
#
实习在多还是在精
#
39470次浏览
277人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务