首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
卧蚕
门头沟学院 C++
发布于浙江
关注
已关注
取消关注
@程序员鱼皮:
这些代码,差点把我气出内伤
大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。举个夸张的例子:让你实现 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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-16 10:47
联想(北京)有限公司_后端开发部_JAVA开发工程师(准入职员工)
康冠科技内推,康冠科技内推码
康冠科技硬件工程师面经8.7 一面终面 只有一次面试决定是否通过1.为什么选择珠三角这个地方来工作(改开前列,经济发达地区有更多机会,也有更多的资源)2.珠三角和长三角在同等条件下,会选择哪个区域,为什么3.平时有什么兴趣爱好4.个人有什么缺点(决策不够决断,指定目标的时候有些太远,可实施性不高)5.从哪里了解到的康冠6.对STM32单片机了解的多吗,32的GPIO口在我们使用的时候,需要进行哪些初始化动作(引脚复用的上下拉电阻,代码也需要确定使用输入输出;单功能接口不需要设置)7.STM32单片机的输入输出IO口最高工作速度,大概是多少兆8.项目中使用的传感器与单片机是怎么通信的,用...
点赞
评论
收藏
分享
昨天 16:10
上海交通大学 算法工程师
拼多多 / Temu 招商运营 二面
岗位名称:招商运营面试时长:1h自评分:8/10是否下一轮:是动机与岗位匹配度你的专业和跨境电商并不相关,为什么想做招商运营?(追问)这个决定是临时起意还是长期规划?有没有做过相关准备?你是从什么时候开始关注 Temu 的?(追问)最早是通过什么渠道了解到 Temu?当时的第一印象是什么?你觉得招商运营这份工作最核心的能力是什么?(追问)这些能力你觉得目前具备哪些?哪些还需要提升?教育背景与个人选择当初为什么决定读研,而不是本科毕业就直接找工作?选择现在这所学校时,你当时主要考虑了哪些因素?(追问)有没有放弃其他机会?当时怎么权衡的?回头看,你觉得读研给你带来的最大变化是什么?(追问)这种变化...
运营必备题库
点赞
评论
收藏
分享
01-01 14:48
字节跳动_TT图文_研发(实习员工)
如果你大二就开始实习,那么就会得到........
一整年就是飞飞飞,甚至一天飞两趟好不容易挣点钱全花机票上了明年秋招会善待我么
谁解其中味:
全球可飞
2025年终总结
点赞
评论
收藏
分享
01-22 16:17
门头沟学院 人工智能
嫉妒牛客上的高薪offer什么心理?
说的就是我 刷到30W以下offer:嗯,正常水平刷到30-40W offer:ber,这么多刷到40-50W offer:眼睛刺痛刷到50W以上offer:划走划走为什么:我每天996,他拿50W我拿15W?
牛客13977413...:
刷到50W以上+“侮辱价,已拒”:
你最近因为什么迷茫?
点赞
评论
收藏
分享
02-20 18:18
浙江大学 算法工程师
快手C++ 一面 面经
1. 介绍一下你做过的项目,重点说说技术难点 (15min)答案要点:选择1-2个最有技术含量的项目深入讲解强调:性能瓶颈分析、内存优化、多线程并发、崩溃率降低用数据说话:启动速度提升40%、内存占用降低30%、崩溃率从2%降到0.5%准备追问:为什么这么设计?有没有考虑其他方案?如何权衡的?2. 智能指针有哪几种?shared_ptr的实现原理智能指针类型:unique_ptr:独占所有权,不可拷贝只能移动shared_ptr:共享所有权,引用计数管理weak_ptr:弱引用,解决循环引用问题auto_ptr:已废弃(C++11)shared_ptr实现原理: template<typ...
C++八股文全集
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
嵌入式应届生春招怎么准备——从零到拿 Offer 的系统攻略
773
2
...
关于租房
470
3
...
27届实习近一年的年度经历和总结
390
4
...
HTTP 和 HTTPS 区别
368
5
...
agent实习都干什么?prompt设计
245
6
...
这个简历可以去找暑期实习了吗
202
7
...
得力嵌入式工程师 二面 面经
195
8
...
大三无实习
195
9
...
美团推荐算法一面
193
10
...
27前端双非找实习
171
创作者周榜
更多
正在热议
更多
#
牛客新年AI问运
#
13796次浏览
168人参与
#
牛友们,签完三方你在忙什么?
#
137359次浏览
993人参与
#
牛客AI体验站
#
17850次浏览
302人参与
#
你最讨厌面试被问什么
#
1162次浏览
25人参与
#
担心入职之后被发现很菜怎么办
#
282477次浏览
1185人参与
#
如何缓解入职前的焦虑
#
258836次浏览
1451人参与
#
校招第一份工作你干了多久?
#
139357次浏览
609人参与
#
牛客租房专区
#
151364次浏览
1479人参与
#
秋招开始捡漏了吗
#
229448次浏览
1044人参与
#
秋招投递攻略
#
268777次浏览
2553人参与
#
九月了,是考研还是就业?
#
89199次浏览
556人参与
#
搜狐工作体验
#
4114次浏览
29人参与
#
机械人求职现状
#
33623次浏览
297人参与
#
这份实习,有没有动摇过你的职业方向?
#
2118次浏览
36人参与
#
我是XXX,请攻击我最薄弱的地方
#
61770次浏览
409人参与
#
用友工作体验
#
18082次浏览
151人参与
#
你的工资什么时候发?
#
57461次浏览
355人参与
#
今年秋招还有金九银十吗
#
75086次浏览
506人参与
#
你的实习什么时候入职
#
348067次浏览
2291人参与
#
职场吐槽大会
#
326186次浏览
2249人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务