【24小时创业】2022年8月18日
06-17
简介 Phil Karlton 曾经说过:计算机科学中只有两件困难的事情:缓存失效和命名。命名是编写干净代码的基础。
这篇文章的副标题其实是《关于命名的读书笔记》。我整理了一些学习过程中的经验笔记,希望大家互相鼓励!为什么我们需要给它起一个好名字呢?任何傻瓜都可以编写计算机可以理解的代码。
只有那些写出易于人类理解的代码的人才是优秀的程序员。 ——Martin Fowler 干净的代码就像优美的散文。
——Grady Booch 程序是为人们阅读而编写的,并且可以在机器上运行。 –《计算机程序的结构与解释》阅读悬疑侦探小说,通过神秘的文字来猜测故事的情节,是一种很好的体验。
但如果你正在阅读代码,这种经历会让你哭泣。好的命名是困难的。
起一个名字看似不难,但经过深思熟虑后想出一个名副其实、富有表现力的名字却并不是一件容易的事。命名为何困难?因为命名过程本身就是一个抽象和思考的过程。
在工作中,当我们无法为模块、对象、函数甚至变量找到合适的名称时,往往意味着我们对问题理解得不够透彻。 ,需要重新探究问题本质,重新分析和抽象问题域,有时还要调整设计、重构代码。
因此,好的命名是我们写出好的代码的基础。正如 Stack Overflow 创始人 Joel Spolsky 所说:“创造好名字很难,但应该很难,因为一个好名字需要将精髓凝结成一两个词,因为一个伟大的名字可以在一两个词中捕捉本质含义。
” .)”此外,Martin Fowler 还表示,他最喜欢的谚语就是我们引言中提到的那句:“在计算机科学中只有两件难事:缓存失效和命名事物。”变量命名 1) 良好命名的注意事项 1.1) 命名要名副其实 这是命名变量时最重要的一点。
需要考虑的重要选项。名称应该完整、准确地描述变量所代表的内容。
最简单的方法是用文字来描述变量的含义。变量的描述是最好的变量名。
这个名称很容易阅读,因为它不包含容易混淆的缩写,并且没有歧义。因为他对他所代表的内容给出了完整的描述,所以几乎不会产生混淆。
例如描述体育场的座位数,number_of_sets_in_the_stadium 注:本文中的名称均采用python命名方式编写。对于其他语言,可以根据语言命名格式进行转换。
如果有一个变量你无法描述,说明你可能需要重新思考业务和逻辑。 1.2)以问题为导向。
令人难忘的名字通常反映的是问题,而不是解决方案。好的名称通常表达什么,而不是如何,如果名称反映计算的某些方面而不是问题本身,那么它反映的是如何而不是什么。
我们以员工的数据记录 input_rec 或 employee_data 为例。 input_rec反映了输入记录的计算机学术术语。
employee_data 直接指出了问题。那么employee_data是一个好名字。
1.3) 最佳名称长度 看来变量名称的最佳长度应该在 n 和 number_of_sets_in_the_stadium 之间。太短的名称无法传达足够的信息。
太长的名称很难书写,并且会模糊程序的视觉结构。国外巨头Gorla和Benander发现,当变量名平均为10到16个字符时,调试程序所花费的时间最少,而且也适合平均名称长度为8到20个字符时的调试。
该原则不要求您将变量的长度保持在 8 到 16 之间。它强调的是,如果你查看自己编写的代码,看到很多较短的名称,那么你需要仔细思考这些名称是否足够清楚地表达了它们的含义。
代码语言:shell拷贝太长:number_of_sets_in_the_stadium太短:n,nsisd正好:num_sets_in_stadium1.4)变量名中的限定符。很多程序都有代表计算结果的变量:total、average、maximum等,如果你想用total、sum、average、max、min、record、string、pointer等限定符来修改某些东西,请把限定符放在在名称的末尾。
因为变量名中最重要的部分,即赋予变量主要含义的部分,应该放在最前面,这样这部分才能显得最突出,最先被阅读。此外,将限定符放在末尾可以提高可读性并简化维护工作。
2)命名特定类型的数据 2.1)命名循环下标 我们基本上每天都会使用循环,从编写shell脚本到登月项目。这在软件工程中很常见。
由于您经常使用 i、j 和 k,因此您可能对它们很熟悉。如果要在循环之外使用变量,则应为其指定比 i、j 或 k 更有意义的名称。
如果循环超过几行,阅读代码的人很容易忘记原来的含义。代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 水果 = ['banana', 'apple', 'mango'] forfruit infruits: print(f"当前水果:{fruit}") 是循环下标变量命名可以避免下标串扰。
也就是说,当我想写j时,我写了i。作者之前写循环的时候出现了串扰,导致调试后定位发现了bug。
当然,i、j、k这三个循环下标从C语言诞生之初就一直伴随着我们,并且深入人心,所以当你要使用它们的时候,尽量避免在非非场合使用它们。 - 下标的情况,可能会引起误解(想一个更具描述性的名字问题就解决了)。
2.2) 命名状态变量。状态变量主要用于描述程序的状态。
建议将标记视为一种状态变量,并给它起一个比flag和status更好的名称。标记的名称不应包含 flag,因为您看不到标记的用途。
为了清楚起见,我们还应该使用枚举类型、命名常量或全局变量作为常驻常量进行赋值。 2.3) 命名临时变量。
临时变量用于存储计算的中间结果。我们经常将它们写为 temp、x 或其他一些模糊且非描述性的名称。
临时变量表??明您没有完全理解问题。而且,由于我们“正式”给这些变量赋予了“临时”状态,所以我们往往会更随意地对待它。
当你忽略它时,就有可能出现错误。通常需要暂时保留一些值,但无论从哪个角度来看,程序中的大多数变量都是临时的。
称其中一些为暂时的意味着你还没有弄清楚它们的实际含义。使用。
2.4)命名布尔变量推荐使用一些经典的布尔变量名:done:用于表示某件事已经完成。完成前为假,完成后为真。
error:用于指示发生了错误。错误发生前设置为False,发生错误时设置为True。
found:用于表示某个值已被找到。未找到前为假,找到后为真。
success或ok:用于指示操作是否成功。如果操作失败则为 False,如果操作成功则为 True。
为布尔变量赋予隐式“true 或 false”含义的名称(例如 did 和found)是很好的布尔变量名称,因为状态不是 True 就是 False,但是像 status 这样的状态是一个非常糟糕的布尔变量值,因为它不是显式的。真假。
如果为 True,状态意味着什么?还有程序员喜欢在自己写的布尔变量名前加上is(你骗人吗-_-|)。添加is后,变量名变成is_error?是否完整?优点之一是它不会用于不暗示“真假含义”的名称,例如 is_status。
缺点是降低了可读性。例如,if (is_found) 的可读性稍差于 if (found)。
使用正布尔变量名称,例如 not_found、not_done,这似乎很难阅读。这里声明一下,让大家感受一下。
如果没有 not_found 参加门萨测试怎么样?这样的名称应该替换为类似 find 的名称。 2.5) 命名常量。
因为命名常量与变量非常相似,所以我将在这里讨论它们。命名命名变量时,应该根据常量所代表的含义来命名,而不是根据常量所代表的值来命名。
3) 应避免使用的名称。避免使用误导性名称或缩写。
确保名称的含义正确。大家都知道ATM机取款,但是网络中存在异步传输模式(ATM)。
这很容易。尽量避免误解。
3.1) 避免使用具有相似含义的名称。如果两个变量的名称交换了而不影响你对程序的理解,那么你需要重命名这两个变量,因为如果在同一段代码中使用它们很容易混淆。
,发生很难立即检测到的错误。避免使用含义不同但名称相似的变量。
还要避免使用含义不同但名称相似的变量,例如 client_recs 和 client_reps。这样的名称仅相差一个字母,编辑完成时很容易忽略,从而导致错误。
3.2) 避免使用发音相似的名字。使用读音相近的词作为变量,主要有两点不妥:一是与他人讨论时容易产生误解。
第二次做语音测试。 3.3) 避免在名称中使用数字 如果名称中的数字确实很重要,建议使用数组而不是一组单独的变量。
如果数组放不下,那么数字就更不合适了。避免像file1和file2、total1和total2这样的变量,过一段时间就没有人知道它们是什么了。
您始终可以想出可以区分变量的名称,而无需添加数字。特殊情况要特殊对待,比如深圳到上海的G国道,美国51区。
建议在创建包含数字的名称之前,请确保没有更好的选择。 3.4) 避免拼写错误的名字。
别人要花很多脑细胞才能读懂你的代码,而你却拼错了。内容,上下文,highlite 和 hilite,兄弟,饶过那些读你代码的人吧。
3.5) 避免仅按大小写区分变量名,因此语言是区分大小写的,但最好避免仅按大小写区分变量。大写名称和小写名称的字面含义是相同的,因此最好不要使变量不同。
3.6) 避免使用标准类型,并且不要在变量和函数的名称中使用语言关键字。现在很多语言都不能写关键字,但是不区分大小写,比如python代码: 代码语言:python代码运行次数:0 Copy Cloud Studio code run >>> if = 1 File "", line 1 if = 1 ^SyntaxError: invalid syntax>>> If = 1>>>本文提供了这么多变量名的方法,所以不要使用关键字。
3.7) 避免使用与变量含义无关的名称。就问你害怕吗?其他人喜欢给自己有特殊含义的变量名作为变量名,除非程序确实与你的特殊含义相关。
这些都是可以避免的。 3.8) 避免在名称中包含易混淆的字符。
圈出以下不属于该组的名称: eye_Chart1 ttl5 TTLCONFUSIONeye_ChartI ttlS TTLCONFUSIONeye_Chart1 tt1S TTLC0NFUSION 最好不要参与这些只出现在找茬游戏中的变量。函数命名 1. 描述函数所做的一切。
函数的名称应该是动词或动词短语,例如delete_page或save等。函数的名称应该描述其所有的输出结果和副作用。
例如,如果您的函数计算报告总计并打开输出文件,则将其命名为computer_report_totals() 将是不完整的。完整的应该是computer_report_totals_and_open_output_file()。
如果你编写一些有副作用的子程序,你最终会得到上面提到的奇怪的名字。解决这个问题的方法不是使用描述性较差的computer_report_totals()命名方式,而是改变一下写法, 直接写出来解决问题,没有副作用。
2. 命名函数时,描述返回值。函数有返回值,所以函数应该根据它的返回值来命名。
比如xxx_is_ready之类的东西,一看就知道是返回一个布尔值。 3、准确使用反义词。
在命名对偶词时,遵循对偶词的命名规则,有利于保持一致性,从而提高可读性。像first/last这样的对比很容易理解,而file_open()和l_close()则令人困惑。
以下是一些常见的对比短语。代码语言:shell copy add/removeincrement/decrementopen/closebegin/endinsert/deleteshow/hidecreate/destroylock/unlocksource/targetfirst/lastmin/maxstart/stopget/putnext/previousup/downget/setold/new4。
对函数名长度的研究表明,变量名的长度最佳长度是9到15个字符。在面向对象的语言中,函数遵循对象的名称,实际上提供了其名称的一部分。
关键点的意思要尽可能清晰,长度取决于名称是否清晰。 5、建立常用操作的命名规则 在某些系统中,区分不同的类别非常重要,而命名规则往往可以是表示这种区分的最简单、最可靠的方式。
忽略为返回对象 ID 的类函数建立命名规则,请查看以下名称:employee.id.get()dependent.get_id()candidate.get_id()6。类命名 类的名称应该是名词或名词短语,例如 Customer 或 AddressParser。
命名工具推荐Codelf是由著名移动前端调试工具MIHTool作者、前网易前端工程师基于searchcode和有道词典开发的。目前在 Github 上开源。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-17
06-17
06-18
06-18
06-06
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用