首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-09 19:57
小天才_产品研发部_软件工程师(准入职员工)
小天才内推,小天才内推码
面详细说一下感受: 整体工作氛围: 比较符合“好的公司就像大学”这句话,公司对校招生非常重视,入职就会匹配导师进行全方位指导(还会提前帮你写大学生成长计划,试用期的三个月要做的成长任务和业务项目都安排好了,非常尽心尽责) 公司员工的年龄和经验分布很平均,毕竟是制造业公司,不像互联网那样人员流动大,整体还算稳定。我在产品科,组里有待了十年以上的,也有入职三五年的,没有什么代沟,毕竟是做教育和儿童产品的,整体氛围比较轻松愉快,不咋卷(我们组基本上都是下班到点就走)。 福利条件: 入职即提供员工公寓,单间只要600元/月;公寓就在办公大楼后面,基本无通勤;食堂就在公寓楼下(味道是真的不错!),价格实...
小天才公司福利 1279人发布
点赞
评论
收藏
分享
12-05 11:31
思特威电子科技_嵌入式工程师(准入职员工)
思特威内推, 思特威内推码
思特威 嵌入式Linux 笔试+一面8.17投递 岗位叫BSP工程师-SOC方向8.30笔试:一共九道题,有八股文简答题,有编程题和逻辑题。八股文包括:指针各种定义,进程线程,死锁,volatile;编程:冒泡,判断素数,指定位置翻转链表;逻辑题:经典的真话假话判断。后续,邮件通知笔试通过,进入面试,一面9.4:1. 自我介绍2. static关键字(存的地方搞错了,说了跟全局一样但是记不清了,有扯皮全局变量存在data、bss段)3. Linux用过吗4. 锁的应用5. 内存分配函数,kmalloc和vmalloc,地址连续吗(vmalloc大内存分配,虚拟地址连续,比较慢,同样不初始化)(...
点赞
评论
收藏
分享
11-02 18:52
西北工业大学 Java
现在没公司招26届的实习了嘛
楼主打算找个实习过渡一下春招,但是投了挺多实习结果都没动静,是简历问题很多嘛,还是就不招26届的实习了另外还请各位佬拷打下简历,能给点建议嘛,谢谢各位了
牛客40701312...:
美团日常还有机会,不卡毕业年限。
点赞
评论
收藏
分享
11-16 23:24
杭州电子科技大学 Java
27Java简历求点评
想找第一个实习,非常焦虑,不知道这个简历够不够用,求佬给建议。
圆规学java:
加一些数据量化,开始投
点赞
评论
收藏
分享
12-05 10:11
上海得物信息集团有限公司_电商推荐产品经理(准入职员工)
得物内推,得物内推码
服装运营岗位~真实工作体验1.💰待遇 薪资是一天150,包晚饭,有双休,基本不加班,有茶水间小零食无限吃🍪,健身房、员工折扣店,晚上10点后打车免费,过节活动礼包🎁 2.👗工作 服装运营岗,主要技能需要会用Excel、vlookup 工作内容有点像对接商家的客服👩🏻💻并且帮助你的直属上级完成部分工作(不同岗位要求不一样。有的是需要会ps之类的) ⌚上班时间: 早10:00晚7:00or早9:30晚6:30 中午12:00-1:30 有的部门是2点 3.🏠租房 异地实习选择的是在附近租房,我是直接在🍠上找的姐妹续租,也可以在租房app上找,入职后有得物内部租房群 4.面试 投...
上海得物信息集团有限公司公司福利 1240人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
零经验也能斩获实习offer
8121
2
...
百度网盘Golang开发一面凉经
4926
数字马力交流圈
热聊中
3
...
小红书26校招Java二面85min
4895
4
...
0实习冲明年前端暑期,要不要找寒假实习?
4533
华为进展交流圈
热聊中
5
...
这环境。。。我来谈谈选择和长期主义
4006
6
...
工作两年裸辞读研,我后悔了吗···
3266
7
...
亲戚一张嘴,离职变丑闻
2546
8
...
LangChain4j(Java 版 LangChain)速成教学
2225
9
...
招转培啥时候能被治理
2225
10
...
成都java小厂 日常实习一面面经 25min
2177
创作者周榜
更多
正在热议
更多
#
找工作能把i人逼成什么样
#
4964次浏览
50人参与
#
面试尴尬现场
#
198784次浏览
753人参与
#
百融云创求职进展汇总
#
22350次浏览
145人参与
#
0经验如何找实习?
#
15238次浏览
298人参与
#
最难的技术面是哪家公司?
#
60099次浏览
937人参与
#
你今年做了几份实习?
#
4487次浏览
66人参与
#
腾讯音乐求职进展汇总
#
142993次浏览
1032人参与
#
字节出了豆包coding模型
#
4566次浏览
49人参与
#
你找工作经历过哪些骗局?
#
5616次浏览
100人参与
#
实习心态崩了
#
93819次浏览
487人参与
#
你开始找寒假实习了吗?
#
8635次浏览
137人参与
#
实习越久越好,还是多多益善?
#
11768次浏览
98人参与
#
25年找工作是什么难度?
#
8186次浏览
89人参与
#
一上班就想____,这正常吗?
#
2876次浏览
62人参与
#
刚工作,应该先搞钱or搞成长?
#
4652次浏览
67人参与
#
离职你会和父母说吗?
#
6292次浏览
86人参与
#
你投了多少家公司?进展是___
#
183374次浏览
1135人参与
#
如果公司降薪,你会跳槽吗?
#
109289次浏览
687人参与
#
实习必须要去大厂吗?
#
168366次浏览
1660人参与
#
你是怎么和mt相处的?
#
82519次浏览
436人参与
#
你会为了工作牺牲生活吗?
#
65052次浏览
446人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务