属于博物馆而不是存储库的代码
“为什么我们不应该庆祝美丽的代码”
我们都见过它——代码的结构如此复杂和原始,以至于它属于博物馆,而不是存储库。这是一种你会敬畏地盯着看一会儿的代码……直到你意识到你需要调试它。然后,就像我们其他凡人一样,您会想知道为什么有人决定编写 JavaScript,就像他们正在写下一部伟大的美国小说一样。
让我们明白一点:漂亮的代码只有有用才算漂亮。如果您的团队需要博士学位。用深奥的语法来弄清楚一个功能是如何工作的,恭喜你——你已经创造了一件无人能维护的杰作。
这就是为什么你应该抵制创建过于聪明的代码的冲动以及该怎么做。系好安全带;例子即将到来。
过度设计的优雅的魅力
首先,我们来看看开发者为什么要编写这种代码。
- 感觉很好。编写聪明的代码可以满足智力的渴望。这是一个灵活的时刻,一个“看看我能做什么”的时刻。
- 它给(一些)人留下了深刻的印象。直到这些人承担维护它的任务。然后,这只会让他们感到沮丧。
- 它显示出精通。或者至少应该是这样。但真正的掌握并不是创造复杂性,而是创造复杂性。这是简单地解决问题。
示例 1:“WTF”工厂函数
这是我最近偶然发现的宝石:
const createMultiplier = (x) => (y) => (z) => x * y * z; const multiply = createMultiplier(2)(3); console.log(multiply(4)); // Outputs 24
漂亮吗?当然。但祝初级开发者好运,他们必须弄清楚这里发生了什么。三层函数来乘三个数字?恭喜你,你已经把算术变成了奥运会项目。
不要这样做。这是为人类编写的相同功能:
function multiplyThreeNumbers(x, y, z) { return x * y * z; } console.log(multiplyThreeNumbers(2, 3, 4)); // Outputs 24
可读。简单的。维持大家的理智。
示例 2:莎士比亚的承诺链
现在让我们来谈谈看起来像是莎士比亚代写的承诺链:
fetch(url) .then((response) => response.json()) .then((data) => data.map((item) => item.isActive ? { ...item, status: "active" } : { ...item, status: "inactive" } ) ) .then((updatedData) => updatedData.reduce( (acc, curr) => curr.status === "active" ? { ...acc, active: [...acc.active, curr] } : { ...acc, inactive: [...acc.inactive, curr] }, { active: [], inactive: [] } ) ) .then((finalResult) => console.log(finalResult)) .catch((error) => console.error(error));
这段代码有效。但这也是对任何必须维护它的人的犯罪。为什么数据转换的每一步都像俄罗斯套娃一样嵌套在下一个步骤中?
让我们重构一下:
async function processData(url) { try { const response = await fetch(url); const data = await response.json(); const updatedData = data.map((item) => ({ ...item, status: item.isActive ? "active" : "inactive", })); const finalResult = updatedData.reduce( (acc, curr) => { if (curr.status === "active") { acc.active.push(curr); } else { acc.inactive.push(curr); } return acc; }, { active: [], inactive: [] } ); console.log(finalResult); } catch (error) { console.error(error); } } processData(url);
将逻辑分解为步骤使代码可读。它仍然在做同样的事情,但现在每个阶段发生的事情都很清楚。
为什么简单更好
说到软件,请记住这条黄金法则:你的代码不是个人日记。它是一种沟通工具。如果您的团队无法阅读它,他们就无法使用它。如果他们无法与之合作,业务就无法前进。
这就是简单获胜的原因:
1 更快的入门:初级开发人员不需要 Rosetta Stone 来理解您的代码。
2 更轻松的调试:当错误出现时(它们一定会出现),清晰的逻辑使它们更容易查明。
3 个更快乐的团队:没有人喜欢感到愚蠢。过于聪明的代码会疏远你的队友。
外卖
编写代码就像在经历了一夜的艰难睡眠后向未来的自己解释一样。善待下一个必须阅读您作品的开发人员 - 因为很有可能,那个开发人员就是您。
美丽的代码并不在于它看起来有多花哨,而在于它的外观。这是关于它如何有效地解决问题。任何少的东西都只是虚荣心的表现。
以上是属于博物馆而不是存储库的代码的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务
