首页 > 电视 > > 正文

快讯:这些代码,差点把我气出内伤

2023-07-03 14:19:02 来源:哔哩哔哩

大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。


【资料图】

先问大家一个小问题:你觉得看别人代码累,还是自己写代码累?

我相信有很多朋友会说,当然是自己写代码累了,要思考逻辑、要动手敲键盘,身心俱疲啊;但是,如果你需要经常阅读别人的代码,尤其是烂代码,答案就不一定了。

因为自己写代码,逻辑是自己来梳理的、代码自己是熟悉的;但是看别人的代码,你就要去理解别人的代码逻辑,再加上烂代码的加持,可能很简单的逻辑,你都得看半天才能懂。所以很多大佬在面对前人的 “屎山” 项目时,宁愿自己重写,也不去读烂代码。

举个夸张的例子:让你实现 1 + 1 的求和

自己写:

let sum = 1 + 1;

某烂代码可能是:

let a = {};let b = {}; = function() {  return 1;}; = 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 版本控制系统,只要你的代码提交信息写得好,要用到被删掉的历史代码时,去提交记录里找即可。

注意,如果是学习时写代码,多保留一些也是合理的。但企业项目中,项目代码精简凝练些会更好。

这里打个比方,写代码就像是我在公司里堆东西,一开始总觉得多一点没关系,反正有空间。但是,冗余代码就像是杂物,会越堆越多,迟早有一天,会影响到你,就像我们公司现在一样(右边有一堆杂物):

大概就分享到这里,请大家在评论区 @ 出你写烂代码的同事吧 ~

欢迎学编程的朋友们加入鱼皮的编程学习圈子() ,和上万名学编程的同学共享知识、交流进步,学习原创项目并享有答疑指导服务。

标签:

快讯:这些代码,差点把我气出内伤

大家好,我是鱼皮,一个正在烂代码的泥潭里面摸爬滚打的程序员。先问大

2023-07-03 14:19:02

全球观天下!赛事经济振兴乡村大有可为

​继“村BA”之后,“村超”也火爆“出圈”。贵州省黔东南苗族侗族自治

2023-07-03 13:49:09

张雪峰被点名,人民日报强力回应,普通百姓孩子高考志愿怎么选

人民日报在一篇发文中提出了不同的观点,认为填报专业不能简单地以就业

2023-07-03 13:37:24

快资讯:7月3日 13:24分 江苏华辰(603097)股价快速拉升

分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地上涨

2023-07-03 13:13:02

日本公明党党首:福岛核污水排海应避开海滨浴场开放期

日本公明党党首山口那津男7月2日就东京电力公司福岛第一核电站污水排海

2023-07-03 12:46:15

“数创未来”数字商务展区亮相第三届中非经贸博览会

中非“湘”会,携手前行。6月29日上午,第三届中国-非洲经贸博览会暨中

2023-07-03 12:41:56

当前关注:原油震荡偏空:恒力期货7月3早评

油端-聚酯-化纤【原油】方向:震荡偏空行情回顾:美联储暂停加息,原油

2023-07-03 12:17:45

董事长被留置,230亿市值卫宁健康跌停_焦点消息

【公司动态】卫宁健康科技集团股份有限公司(简称“卫宁健康”:300253

2023-07-03 12:03:18

金冠股份:公司常州生产基地为公司储能pack生产线,目前已进入投产阶段

每经AI快讯,有投资者在投资者互动平台提问:公司常州的工厂目前产线安

2023-07-03 11:44:01

2米长蛇闯进公司大厅吓跑员工 民警“搏斗”后放生处理_环球快资讯

【惊!2米长蛇闯进公司大厅吓跑员工】近日,江苏南京,民警接到群众报

2023-07-03 11:25:47

动车组驶上青藏线——青藏铁路西格段动车组投入运营首日见闻

动车组驶上青藏线——青藏铁路西格段动车组投入运营首日见闻,西格,动车

2023-07-03 11:05:28

珠江流域休渔结束 万绿湖“第一捕”渔民笑开颜 今亮点

珠江流域休渔结束万绿湖“第一捕”渔民笑开颜---在广东河源万绿湖的开

2023-07-03 10:41:56

第二季度南宁政府网站和政务新媒体检查合格率达100%

第二季度全区政府网站和政务新媒体检查情况公布南宁政府网站和政务新媒

2023-07-03 10:36:23

期债中期关注逢低做多机会_每日看点

展望下半年基本面,首先,消费存在继续修复空间,出行链条偏强和线下服

2023-07-03 10:26:45

焦点滚动:*ST同达筹码连续11期集中

*ST同达7月3日在交易所互动平台中披露,截至6月30日公司股东户数为8825

2023-07-03 10:13:55

合景泰富集团涨超7% 传长实有意接手楼盘“凯玥”相应债权

合景泰富集团(01813)涨超7%,截至发稿,涨7%,报1 07港元,成交额276万

2023-07-03 09:53:59

今日关注:“笑气”不“好笑” 吸食有毒害 ——湖北鄂州首例非法经营“笑气”案嫌疑人被批捕

图为民警展示查获的“笑气”。资料图租用仓库、层层分装、制售“笑气”

2023-07-03 09:46:25

促进体育消费 添彩美好生活

可以预见,随着人们对体育休闲需求的不断增加,各地还将出现更多假日精

2023-07-03 09:18:38

线条画人物头像_线条画人物

你们好,最近小未来发现有诸多的小伙伴们对于线条画人物头像,线条画人

2023-07-03 09:14:17

泓博医药:连续3日融资净偿还累计455.1万元(06-30)

2023年6月30日泓博医药连续3日融资净偿还累计455 1万元

2023-07-03 08:40:29

腐殖酸类肥料分类(腐殖酸类肥料)-全球观天下

腐殖酸类肥料分类,腐殖酸类肥料这个很多人还不知道,现在让我们一起来

2023-07-03 08:28:41

立减200元!荣耀60Pro四曲屏手机仅需1799元

需要购买手机的朋友们看过来,现在这款手机做活动,满1000减200元,到

2023-07-03 08:10:15

楚人沐猴而冠耳_楚人沐猴而冠

1、【注音】mùhóuérguàn【出处】《史记·项羽本纪》:“人言楚人沐

2023-07-03 07:52:36

全球热点!福州7月闷热开场,注意午后局地雷雨

7月,茉莉开得很好,每次经过都有不经意的清香在身旁逗留。窗台上植物

2023-07-03 07:50:56

【天天快播报】2017年1-5月我国农产品进出口行情 2017年我国农产品进出口情况

养猪行情:1-5月,我国农产品进出口额796 6亿美元,同比增10 2%。其中

2023-07-03 07:36:45

五菱宏光mini后备箱尺寸图_五菱宏光mini后备箱尺寸是多少? 今热点

理想月交付破3万辆背后:嘴快的李想,手快的理想_独家

警长沃利贝尔有特效(警长沃利贝尔)|微速讯

今日婴童护理股票价格一览,受益的婴童护理概念股票有哪些?

东钱湖旅游度假区_东钱湖旅游度假区行政服务中心

仙人掌的花语功效特点_仙人掌的花语 全球播报

夏尔米(夏尔米) 环球快资讯

卖房子中介费怎么算的_卖房子中介费怎么算-每日热点

速讯:小狮子真的和假的区别_| 生活小常识

潘功胜同志任中国人民银行党委书记

所谓素质,其实是贫富问题——自助餐的故事 世界速递

《英雄联盟》斗魂觉醒派克至臻皮肤获得方法 世界资讯

热资讯!望变电气多个战略性项目首卷(台)产品成功下线

神界传说:霍雨浩受到唐三的表扬,融念冰与唐三再次拌嘴 全球快讯

广州育明叛逆学校介绍 关于广州育明叛逆学校简介_今头条

绥宁鹅公岭乡举办“民族团结杯”拔河比赛

透过镜头看大美中国 大江南北生机盎然

意媒:拉齐奥对5000万的欧米林科维奇标价3000万欧 尤文还嫌贵-热门看点

观速讯丨为老年健康和幸福保驾护航——中国人寿四川省分公司参展第五届中国(四川)老博会

焦点日报:联播+丨中央政治局这堂学习课 聚焦一个“重大命题”

天天观天下!超薄型钢结构防火涂料_言字什么结构

《长风渡》四位男主结局,顾九思当宰相,叶世安成为压寨相公

首届“湖北慈善奖”推荐名单公示!_世界聚焦

复苏的医美市场:轻医美依旧火热 爱美男性与学生党跻身新势力|环球观天下

2023石家庄中考各县一分一档统计表

x 广告
x 广告

Copyright @  2015-2022 亚洲家电网版权所有  备案号: 京ICP备2021034106号-51   联系邮箱:5 516 538 @qq.com