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

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

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

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]删除
最新教程 更多>
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-05-24
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-05-24
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-05-24
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-05-24
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。为了解决此问题,您正在尝试使用“ mb_convert_encoding”和“ iconv”转换受...
    编程 发布于2025-05-24
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-05-24
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-05-24
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-05-24
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    对于每个循环vs. iterator:collection traversal for-east loop 在Java 5中介绍的,for-east loop(也称为loop的增强型)是一个简洁的和易于阅读的概述,并且易于读取概述的概述。它在内部使用迭代器: list a = new arr...
    编程 发布于2025-05-24
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-05-24
  • 如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    appEngine静态文件mime type override ,静态文件处理程序有时可以覆盖正确的mime类型,在错误消息中导致错误消息:“无法猜测mimeType for for file for file for [File]。 application/application/octet...
    编程 发布于2025-05-24
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-05-24
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-05-24
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-05-24

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

Copyright© 2022 湘ICP备2022001581号-3