”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解干净的代码:有意义的名字 ⚡

理解干净的代码:有意义的名字 ⚡

发布于2024-09-30
浏览:568

Understanding Clean Code: Meaningful Names ⚡

编写代码时,最容易被忽视但又至关重要的方面之一就是命名。

我们为代码中的变量、函数、类和其他实体选择的名称可以显着影响可读性、可维护性和整体质量。

《清洁代码》的第 2 章深入研究了选择有意义的名称的艺术和科学,提供了一组指南,可以帮助开发人员编写既具有表现力又易于理解的代码。

在这篇博文中,我们将探讨本章的要点,并用 JavaScript 中的示例来说明每个概念。


?1.使用透露意图的名称

您选择的名称应清楚地传达变量、函数或类背后的意图。读者应该能够理解代码的作用,而无需额外的上下文。

// Bad
let d; 

// Good
let daysUntilDeadline;

在第一个示例中,d 很模糊并且没有提供上下文。改进版本 daysUntilDeadline 清楚地表明了变量代表的内容。


?2.避免虚假信息

名称不应具有误导性。避免使用可能暗示与代码实际含义不同的名称。

// Bad
let accountList = new Map();

// Good
let accountsMap = new Map();

在这里,accountList 可能会产生误导,因为它暗示一个列表(这是一个有序集合),而实际的数据结构是一个 Map。使用accountsMap更准确。


?3.做出有意义的区分

如果您需要区分相似的变量、函数或类,请以一种使区别清晰且有意义的方式进行操作。

// Bad
getUserInfo();
getUserData();

// Good
getUserProfile();
getUserSettings();

在第一个示例中,getUserInfo 和 getUserData 太相似,并且没有清楚地表达它们的差异。第二个示例通过根据返回的内容命名函数来阐明区别。


?4.使用容易发音的名字

名称应该易于阅读和发音。这使得与其他人讨论代码变得更加直接。

// Bad
let genymdhms;

// Good
let generationTimestamp;

genymdhms 是一个难以发音的名称,很难记住或讨论。然而, GenerationTimestamp 很清楚,也很容易说。


?5.使用可搜索的名称

在较大的代码库中,使用易于搜索的名称很重要。避免使用单字母名称或过度缩写的名称。

// Bad
let e = document.getElementById('email');

// Good
let emailInputElement = document.getElementById('email');

e 不容易搜索,并且它没有传达它所代表的含义。 emailInputElement 更具描述性并且更容易在代码库中找到。


?6.避免编码

避免在名称中包含类型、前缀或其他编码。让名称本身具有足够的描述性。

// Bad
let phoneString;

// Good
let phoneNumber;

在这种情况下,phoneString 包含不必要的类型编码(String)。电话号码更简单、更直接。


?7.类名应该是名词,函数名应该是动词

类代表对象或概念,因此它们的名称应该是名词。另一方面,函数代表动作,因此它们的名称应该是动词。

// Class names (Nouns)
class UserAccount {}
class ShoppingCart {}

// Function names (Verbs)
function calculateTotal() {}
function sendEmail() {}

这种区别有助于理解代码中每个元素的作用。


?8.避免心理映射

不要强迫读者将名字翻译成更有意义的东西。该名称应该是不言自明的。

// Bad
let n = 5; // Number of users

// Good
let userCount = 5;

n 需要读者记住或推断出它代表用户数量,而 userCount 则一目了然。


结论⚡

选择有意义的名称不仅仅是风格问题,它是编写干净、可维护代码的基本实践。

通过遵循《简洁代码》第 2 章中概述的准则,您可以提高 JavaScript 代码的可读性,并使其他人(和您自己)更容易理解和维护。

请记住,目标是编写能够传达其目的和逻辑的代码,从而减少读者的认知负担。

下次命名变量、函数或类时,请考虑有意义的命名原则以及它们如何有助于生成更清晰、更有效的代码。

快乐编码!

版本声明 本文转载于:https://dev.to/alisamir/understanding-clean-code-meaningful-names-3d5k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Go 中的并发模式;工作池和扇出/扇入
    Go 中的并发模式;工作池和扇出/扇入
    Go 以其卓越的并发模型而闻名,但许多开发人员只关注 goroutine 和通道。然而,工作池和扇出/扇入等并发模式提供了真正的效率。 本文将介绍这些高级概念,帮助您最大限度地提高 Go 应用程序的吞吐量。 为什么并发很重要 并发允许程序高效地执行任务,特别是在处理 I/O 操作、...
    编程 发布于2024-11-06
  • 如何在 C++ 中将单个字符转换为 std::string?
    如何在 C++ 中将单个字符转换为 std::string?
    从单个字符创建字符串人们可能会遇到需要将表示为 char 数据类型的单个字符转换为std::string。从字符串中获取字符很简单,只需在所需位置索引字符串即可。然而,相反的过程需要不同的方法。要从单个字符创建 std::string,可以使用多种方法:使用 std::string参数计数为 1:c...
    编程 发布于2024-11-06
  • JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的意义在编程领域,命名约定的使用对于增强代码至关重要可读性并遵循最佳实践。在 JavaScript 中,美元符号 ($) 通常作为变量名称的前缀出现,特别是引用 jQuery 对象的变量名称。美元符号的用途是什么?与流行的看法相反,JavaScript 变量名...
    编程 发布于2024-11-06
  • 如何重新排列 CSS 网格布局中的列以实现移动响应?
    如何重新排列 CSS 网格布局中的列以实现移动响应?
    在 CSS 网格布局中重新排序列在 CSS 网格布局中,有多种技术可以修改列的顺序以实现具体布局。本问题探讨了重新排列移动布局列的可能性,例如将列移动到底部,同时在桌面布局上保持所需的列顺序。解决方案选项:grid-template-areas: 此属性允许您在网格内定义命名区域,然后将网格项分配给...
    编程 发布于2024-11-06
  • Hacktoberfest 周在线拍卖系统
    Hacktoberfest 周在线拍卖系统
    概述 在 Hacktoberfest 的第三周,我决定为一个较小但有前途的项目做出贡献:在线拍卖系统。尽管该项目仍处于早期阶段,但它已经显示出增长潜力,而且我看到了帮助改进其代码库的机会。我的任务是通过减少冗余代码和改进整体结构来重构项目,使其更具可维护性和可扩展性。 ...
    编程 发布于2024-11-06
  • 如何使用“exception_ptr”在 C++ 线程之间传播异常?
    如何使用“exception_ptr”在 C++ 线程之间传播异常?
    在 C 中的线程之间传播异常 当从主线程调用的函数生成多个线程时,就会出现在 C 中的线程之间传播异常的任务用于 CPU 密集型工作的工作线程。挑战在于处理工作线程上可能发生的异常并将其传播回主线程​​以进行正确处理。传统方法一种常见方法是手动捕获工作线程上的各种异常,记录它们的详细信息,然后在主线...
    编程 发布于2024-11-06
  • 如何使用 3D CSS 变换修复 Firefox 中的锯齿状边缘?
    如何使用 3D CSS 变换修复 Firefox 中的锯齿状边缘?
    使用 3D CSS 变换时 Firefox 中的锯齿状边缘与 Chrome 中使用 CSS 变换时的锯齿状边缘问题类似,Firefox 在 3D 变换中也出现了这个问题。背面可见性作为 Chrome 中的潜在解决方案,在 Firefox 中被证明无效。解决方法:要在 Firefox 中缓解此问题,您...
    编程 发布于2024-11-06
  • 为什么 PHP 的 mail() 函数给电子邮件发送带来挑战?
    为什么 PHP 的 mail() 函数给电子邮件发送带来挑战?
    为什么 PHP 的 mail() 函数达不到要求:限制和陷阱虽然 PHP 提供了 mail() 函数用于发送电子邮件,但它却失败了与专用库或扩展相比较短。以下是与使用 mail() 相关的缺点和限制的全面检查:格式问题:mail() 可能会遇到以下问题:标题和内容格式,尤其是操作系统之间的换行符差异...
    编程 发布于2024-11-06
  • 使用 npyConverter 简化 NumPy 文件转换
    使用 npyConverter 简化 NumPy 文件转换
    如果您使用 NumPy 的 .npy 文件并需要将其转换为 .mat (MATLAB) 或 .csv 格式,npyConverter 就是适合您的工具!这个简单的基于 GUI 的工具通过干净且用户友好的界面提供 .npy 文件的批量转换。 主要特点 批量转换:将目录下所有.npy文件...
    编程 发布于2024-11-06
  • 如何禁用特定线路的 Eslint 规则?
    如何禁用特定线路的 Eslint 规则?
    禁用特定行的 Eslint 规则在 JSHint 中,可以使用语法禁用特定行的 linting 规则: /* jshint ignore:start */ $scope.someVar = ConstructorFunction(); /* jshint ignore:end */对于 eslint...
    编程 发布于2024-11-06
  • 如何在没有错误的情况下将列表插入 Pandas DataFrame 单元格?
    如何在没有错误的情况下将列表插入 Pandas DataFrame 单元格?
    将列表插入 Pandas 单元格问题在 Python 中,尝试将列表插入 Pandas DataFrame 的单元格可能会导致错误或意想不到的结果。例如,当尝试将列表插入 DataFrame df 的单元格 1B 时:df = pd.DataFrame({'A': [12, 23], 'B': [n...
    编程 发布于2024-11-06
  • Matplotlib 中的“plt.plot”、“ax.plot”和“figure.add_subplot”之间的主要区别是什么?
    Matplotlib 中的“plt.plot”、“ax.plot”和“figure.add_subplot”之间的主要区别是什么?
    Matplotlib 中绘图、轴和图形之间的差异Matplotlib 是一个用于创建可视化的面向对象的 Python 库。它使用三个主要对象:图形、轴和绘图。图形图形表示将在其中显示可视化的整个画布或窗口。它定义画布的整体大小和布局,包括边距、背景颜色和任何其他全局属性。轴轴表示图中绘制数据的特定区...
    编程 发布于2024-11-06
  • FireDucks:以零学习成本获得超越 pandas 的性能!
    FireDucks:以零学习成本获得超越 pandas 的性能!
    Pandas 是最受欢迎的库之一,当我在寻找一种更简单的方法来加速其性能时,我发现了 FireDucks 并对它产生了兴趣! 与 pandas 的比较:为什么选择 FireDucks? Pandas 程序可能会遇到严重的性能问题,具体取决于其编写方式。然而,作为一名数据科学家,我想花...
    编程 发布于2024-11-06
  • CSS 网格:嵌套网格布局
    CSS 网格:嵌套网格布局
    介绍 CSS Grid 是一种布局系统,因其在创建多列布局方面的灵活性和效率而迅速受到 Web 开发人员的欢迎。它最有用的功能之一是能够创建嵌套网格布局。嵌套网格可以在设计复杂网页时提供更多控制和精确度。在本文中,我们将探讨在 CSS Grid 中使用嵌套网格布局的优点、缺点和主要...
    编程 发布于2024-11-06
  • 适用于 Java 的 Jupyter 笔记本
    适用于 Java 的 Jupyter 笔记本
    Jupyter Notebook 的强大 Jupyter Notebooks 是一个出色的工具,最初是为了帮助数据科学家和工程师使用 python 编程语言简化数据处理工作而开发的。事实上,笔记本的交互性使其非常适合快速查看代码结果,而无需搭建开发环境、编译、打包等。此功能对于数据...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3