再见,整洁代码,下载量瞬秒百万

本文讨论了前端开发中代码重构的过程,通过识别和分离重复的数学计算逻辑,将其分为方向和形状相关的函数,实现了代码的整洁和可维护性提升。作者反思了过度追求代码整洁可能导致的问题,强调了实践经验在代码优化中的实际价值。
摘要由CSDN通过智能技术生成

},

resizeBottomLeft(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeBottomRight(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

};

let Oval = {

resizeLeft(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeRight(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeTop(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeBottom(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

};

let Header = {

resizeLeft(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeRight(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

}

let TextBlock = {

resizeTopLeft(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeTopRight(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeBottomLeft(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

resizeBottomRight(position, size, preserveAspect, dx, dy) {

// 10 repetitive lines of math

},

};

这种重复的数学计算逻辑,对我来说,真的难受。

这不是“整洁”的代码。

多数的重复都在于“方向”上的相似,举个例子,Oval.resizeLeft() 和 Header.resizeLeft() 就很类似。这是因为,它们都是在处理拖拽左侧操作柄的问题。

另一个原因在于“形状”所拥有的方法上的相似,例如,Oval.resizeLeft() 和 Oval 上的其它方法是类似的。这是因为,它们都是在处理“椭圆形”上的问题。更进一步,RectangleHeader 以及 TextBlock 都有相似的地方,因为文本框都是“矩形”。

我有个办法。

我们可以通过对代码逻辑进行分组,来实现“去除全部重复”的目的:

let Directions = {

top(…) {

// 5 unique lines of math

},

left(…) {

// 5 unique lines of math

},

bottom(…) {

// 5 unique lines of math

},

right(…) {

// 5 unique lines of math

},

};

let Shapes = {

Oval(…) {

// 5 unique lines of math

},

Rectangle(…) {

// 5 unique lines of math

},

}

然后,像这样来组合它们:

let {top, bottom, left, right} = Directions;

function createHandle(directions) {

// 20 lines of code

}

let fourCorners = [

createHandle([top, left]),

createHandle([top, right]),

createHandle([bottom, left]),

createHandle([bottom, right]),

];

let fourSides = [

createHandle([top]),

createHandle([left]),

createHandle([right]),

createHandle([bottom]),

];

let twoSides = [

createHandle([left]),

createHandle([right]),

];

function createBox(shape, handles) {

// 20 lines of code

}

let Rectangle = createBox(Shapes.Rectangle, fourCorners);

let Oval = createBox(Shapes.Oval, fourSides);

let Header = createBox(Shapes.Rectangle, twoSides);

let TextBox = createBox(Shapes.Rectangle, fourCorners);

代码量减少到 1 / 2,并且,重复代码不复存在!这真是“整洁”啊。如果我们希望改变具体某个“方向”上的或“形状”上的行为,只需要修改一处,而非多处。

已经很晚了(我很疲惫了),我提交我重构后的代码,然后就躺下了,并对自己“帮助同事整洁代码”而感到心满意足。

第二天上午

… 事情并非我想的那样。

我的上级单独找到了我,委婉地要求我撤销昨天的那些修改。我感到很不可思议,旧代码那么差劲,而我的是多么“整洁”啊!

我那时只好谨遵照守;但是后来,历经数年,我才明白他们的要求是对的。

那是一个职业阶段

对“整洁代码”的沉迷、好于“消除重复代码”,是我们大多数开发者都会经历的阶段。当我们对自己的代码没有信心,自我价值感和专业荣誉感往往会使我们与一些可测量的东西靠拢,一组严格的 lint 规则、一套命名规范、一种文件结构、无重复性指标,等等。

你不可能让“重复代码”自动被消除,但是_确实_可以借助“实践经验”使它更可行。你往往可以看到,每次修改后的代码量是变得更多或更少。结果就是,消除重复代码看起来提高了代码的某些客观的可测量指标。然而,糟糕的是,这扰乱了人们的自我认知,他们会对自己说:“我是那种会写出整洁代码的人”,而这其实跟其它的自我欺骗行为没什么两样。

一旦学会了如何“抽象”,我们似乎就会更进一步,每次看到重复的代码,我们甚至能够从“无”中发现可“抽象”的东西。编码数年以后,我们已经厉害得随处都能看到重复的代码,我们同时获得了一项新的超能力:抽象。进而,如果有人告诉我们“抽象是好的”,我们便对此更加笃信。于是我们开始去批判那些不崇尚”整洁代码”的人。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前15.PNG

前16.PNG

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处免费获取

果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)**

最后

[外链图片转存中…(img-NUr02hZ6-1712301508954)]

[外链图片转存中…(img-uAFx1F21-1712301508955)]

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处免费获取

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值