在一篇文章中解决代码中的命名问题

发布于:2024-10-24 编辑:匿名 来源:网络

简介 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 上开源。

在一篇文章中解决代码中的命名问题

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 空气悬架系统提供商“耀明科技”完成超5亿元B轮股权融资

    空气悬架系统提供商“耀明科技”完成超5亿元B轮股权融资

    投资圈(ID:pedaily)据11月14日消息,浙江耀明汽车科技有限公司(耀明)科技)完成B轮5.1亿元股权融资。 本轮融资由国风投联合领投,中车国创、源码资本、深创投、永华投资、火眼资本、杉杉创投等投资方共同领投。 此前,耀明科技于2018年2月完成联想之星领投的Pre-A轮融资

    06-18

  • 首款自校准可编程光子芯片推出,数据高速公路有“坡道”有“桥梁”

    首款自校准可编程光子芯片推出,数据高速公路有“坡道”有“桥梁”

    科技日报 澳大利亚科学家领衔的国际团队研发出首款自校准光子芯片,可以“转变数据高速公路上的桥梁,将改变目前光学芯片之间的连接状况,提高数据传输速度,有望推动人工智能、自动驾驶汽车等领域的发展。 ”最新研究发表在《自然光子学》杂志上,光子电路可以操纵和引导信

    06-06

  • Trifo已完成C1轮数亿元融资,C2轮融资预计年底完成

    Trifo已完成C1轮数亿元融资,C2轮融资预计年底完成

    AI家庭机器人公司Trifo宣布完成数亿元已完成C1轮融资。 领投方为中信建设资本、青岩人工智能产业基金等老股东。 本次投资后,云秀资本担任独家投资者。 Trifo还完成了淡马锡子公司InnoVen Capital数百万美元的债务融资。

    06-18

  • 云启资本-云启资本及其会员企业驰援湖北前线

    云启资本-云启资本及其会员企业驰援湖北前线

    据投资界2月7日消息,继春节前向70余家被投企业交付N95口罩后,云启资本捐赠的首批1万只医用手套云启资金也已发往湖北,特别是物资较为匮乏的县级医院。 此外,云启资本旗下多家成员公司也开始行动:金融(纳斯达克股票代码:QFIN):从除夕开始,金融协同集团立即成立了新型

    06-18

  • 《QQ 影音》疑似已下架,更新最慢,好评最多

    《QQ 影音》疑似已下架,更新最慢,好评最多

    《QQ 影音》已下架!早上一到办公室,就看到这条新闻,让我大脑飞速旋转:“哪个《QQ 影音》?是腾讯的吗?哪年的新闻?为什么?”与此同时,暴风视频、千千静听、QQ宠物、瑞幸小狮……一堆熟悉又陌生的面孔也出现在我的脑海里。 ▲ QQ视频官网不再提供下载。 该软件诞生于《

    06-21

  • “香港创业创新及科技基金”与香港理工大学签署合作备忘录

    “香港创业创新及科技基金”与香港理工大学签署合作备忘录

    投资界(ID:pedaily)10月9日消息,日前,港币基金“香港创业创新国宏嘉信资本基金旗下的“创业香港”(StartupHK))与香港理工大学签署合作备忘录,进一步推动香港理工大学(GBA PolyVentures)推出的“大湾区PolyVentures”计划,利用后者的资源创新创业教育经验,培育深

    06-17

  • 中国半导体功率器件十强榜单出炉,扬杰电子荣登榜首

    中国半导体功率器件十强榜单出炉,扬杰电子荣登榜首

    近日,中国半导体行业协会分立器件第十三届年会暨中国半导体器件技术创新与产业发展论坛在我市成功举办青岛。 会上,中国半导体行业协会公布了中国半导体行业十大功率器件,让我们更深入地了解了中国半导体行业的这一细分领域。 我们来看看这十家企业: 扬州扬杰科技有限公司

    06-06

  • 明星衣橱“挑战”媒体记者,2016年会成为创业公司的讣告年吗?

    明星衣橱“挑战”媒体记者,2016年会成为创业公司的讣告年吗?

    6月12日,商业新闻网站Interface发布了《StarVC参投的跨境服饰电商明星衣橱资金链紧绷 D轮融资恐无人接盘》报道。 该文章后来因举报人后悔而被撤回。 被认为与报道主角、名人衣橱CEO林清华有着千丝万缕联系的天涯论坛,6月14日针对作者和家人的原报道发布了大量“人肉帖”。

    06-18

  • 光谷成立总规模10亿的合伙人投资引导基金

    光谷成立总规模10亿的合伙人投资引导基金

    投资圈(ID:pedaily)据5月18日消息,东湖高新区发布武汉光谷合伙人投资引导基金(以下简称“武汉光谷合伙人投资引导基金”)为“光谷合伙人基金”)。 基金总规模10亿元,初始计划投资2亿元。 子基金申请及甄选将于今日启动。 同日,东湖高新区发布了关于申报武汉光谷合伙人

    06-18

  • 长江存储:今年将如期推出128层闪存

    长江存储:今年将如期推出128层闪存

    证券时报等,SiSC链接:听泛霖专家谈碳化硅和3D NAND。 4月8日,长江存储CEO杨世宁在接受采访时谈到了该公司最先进的层状3D NAND技术的研发进展。 杨世宁表示,短期内Layer 3D NAND技术的研发进度确实会受到影响。 不过,长江存储目前已全部员工复工。 中长期来看,疫情不会影

    06-06

  • 长丰药业完成3.6亿元F轮融资,博源资本、中金启辰联合领投

    长丰药业完成3.6亿元F轮融资,博源资本、中金启辰联合领投

    投资圈(ID:pedaily)7月2日消息,长丰药业继1月份完成6.3亿元E轮融资后,又完成了再次F轮融资3.6亿元,6个月内完成总融资近10亿元。 本轮股权交易由博源资本、中金启辰联合领投,中金启德、上汽恒旭、金浦并购基金、沃森投资等知名机构参与投资。 与此同时,斐君资本、元明

    06-18

  • 开启斩手新方式!环球购物中心KK完成1亿元A轮融资,深创投追加投资,

    开启斩手新方式!环球购物中心KK完成1亿元A轮融资,深创投追加投资,

    据投资界7月24日消息,环球购物O2O+线下体验店KK馆完成1亿元A轮融资。 光明资本与深创投共同投资。 其中,深创投于今年3月投资了Pre-A轮,是KK Pavilion的初始投资者。   KK馆表示,本次融资将主要用于海外供应链建设、实体店扩张以及产品迭代升级。   颠覆传统购物模式,

    06-17