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

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

发布于2024-11-07
浏览:397

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]删除
最新教程 更多>
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-07-21
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-07-21
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-07-21
  • 解决Spring Security 4.1及以上版本CORS问题指南
    解决Spring Security 4.1及以上版本CORS问题指南
    弹簧安全性cors filter:故障排除常见问题 在将Spring Security集成到现有项目中时,您可能会遇到与CORS相关的错误,如果像“访问Control-allo-allow-Origin”之类的标头,则无法设置在响应中。为了解决此问题,您可以实现自定义过滤器,例如代码段中的MyFi...
    编程 发布于2025-07-21
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-07-21
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-07-21
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-07-21
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-07-21
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-07-21
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-07-21
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-07-21
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当需要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考...
    编程 发布于2025-07-21
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-07-21
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-07-21
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,将常数列添加到Spark DataFrame,该列具有适用于所有行的任意值的Spark DataFrame,可以通过多种方式实现。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withCo...
    编程 发布于2025-07-21

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

Copyright© 2022 湘ICP备2022001581号-3