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

发布于: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 上开源。

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

站长声明

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

标签:

相关文章

  • 【24小时创业】2022年8月18日

    【24小时创业】2022年8月18日

    投融资 昨日,国内市场共发生20起投资披露事件,其中先进制造领域7起(启芯半导体、冕冠半导体、启源芯电、新泰半导体、新科集成、星宇空间、每科深思)、汽车交通案例6个(浩一充电、华丰汇众、枫叶出行、猛狮科技、欣旺达EVB、维都科技)、医疗健康案例2个(瑞顺生物、中科

    06-17

  • 信银理财副总裁贺晋:拟设立10亿长三角股权投资基金

    信银理财副总裁贺晋:拟设立10亿长三角股权投资基金

    据投资界(微信ID:pedaily)12月4日消息,昨日,《走进信银理财-温度》信银理财副总裁贺晋在上海召开的《财富行者》媒体发布会上表示,信银理财坚定落实监管要求,稳步推进金融产品转型。 今年信银理财新老产品比例将达到7:3。 可以说,我们的产品转型就在眼前。 ”贺晋介绍

    06-17

  • GeekPwn:电脑管家团队1秒攻破Surface Pro 4,两次夺得世界黑客大赛冠军

    GeekPwn:电脑管家团队1秒攻破Surface Pro 4,两次夺得世界黑客大赛冠军

    5月12日,世界黑客大赛GeekPwn澳门站盛大举行。 腾讯电脑管家网络攻防队一秒破解微软Surface Pro 4,控制Surface摄像头,实现远程监控,成为本次GeekPwn澳门大赛的最大亮点。 腾讯电脑管家网络攻防小组成功攻入Surface Pro 4,将黑客电影中的场景当场变成了真实的现实:通过利

    06-18

  • 第十八届中国中小企业年会正式启动

    第十八届中国中小企业年会正式启动

    9月27日,由中国中小企业商业企业协会联合多家科研单位共同主办的第十八届中国中小企业年会启动仪式和技术机构,举行了。 年会定于11月24日至26日在北京举行。 以“推动企业技术创新,践行中国式现代化”为主题。 任兴磊执行会长在讲话中提到,起点关系大局,起点决定未来。

    06-17

  • 雅高矿业上市,凯雷退出

    雅高矿业上市,凯雷退出

    雅高矿业控股集团是一家集矿业投资与开采、石材加工与销售、石材供应与安装为一体的综合性企业集团。 雅高全产业链整合的战略布局涵盖矿山收购与开采、产品研发与设计、终端渠道建设、销售与售后服务等,实现资源的优化整合。 目前产品已覆盖全球50多个国家。 2019年7月26日

    06-17

  • 新闻 -谐波减速器公司来福谐波已完成6000万元B轮融资,上海金普领投

    新闻 -谐波减速器公司来福谐波已完成6000万元B轮融资,上海金普领投

    据投资界9月7日消息,谐波减速器公司普廷谐波已完成1万元B轮融资。 本轮融资由上海金浦领投,北极光跟投。 本轮融资将主要用于扩大产能以及谐波机电一体化产品的研发。 据悉,今年3月,来福和谐宣布获得由北极光创投领投、乳山资本跟投的数千万元A轮融资。   谐波减速机诞

    06-17

  • 从品酒神器到大学生礼包,看阿里云如何贴近地面飞行

    从品酒神器到大学生礼包,看阿里云如何贴近地面飞行

    作者 |胡海杰崇高的云服务与你我有何关系?日前在北京举行的阿里云峰会上,两款本土产品应用让人印象深刻,分别是一款品酒神器和一款助力大学生在线开发实践的云服务。 阿里巴巴集团副总裁华先胜在推广酒品鉴赏盒产品时表示,它可以通过图像识别、称重、光学扫描等方式识别茅

    06-18

  • 我们想象的AI可能已经过时了

    我们想象的AI可能已经过时了

    今年,AI在绘画上行动起来。 有人欢呼:可以给关键词画图的AI模型,让创作成本接近于零;还有人感叹:在强大的人工智能面前,人类独特的能力正在一一丧失。 当然,也有人感到恐慌:一些图书馆宣布不接受人工智能生成的作品存储,一些画家和漫画家发表反对人工智能模型绘画的声

    06-18

  • 圣茂焊锡材料(苏州)有限公司将于

    圣茂焊锡材料(苏州)有限公司将于

    三月中国电子展推出新款锡膏和助焊剂 - 圣茂焊锡材料(苏州)有限公司很高兴地宣布将参加慕尼黑电子展中国展。 将于3月20日至22日在上海新国际博览中心隆重举行。 公司将展示PQ10系列低温锡膏、适用于汽车电子的新型P系列锡膏、PW水溶性锡膏、SMF-WC53水溶性植球助焊剂及BGA锡

    06-06

  • 无人机器人公司“Insidenoid Robotics”获1500万美元A轮融资,Pitango领投

    无人机器人公司“Insidenoid Robotics”获1500万美元A轮融资,Pitango领投

    6月16日消息:据Finsmes报道,无人机器人公司Insidenoid Robotics近日获得1万美元A轮融资。 本轮融资由Pitango领投,Target Global、欧洲创新理事会基金和Spider Capital跟投。 据了解,本轮融资将用于投资全力生产并制定其GTM(进入市场)战略。 该公司最近还推出了Tando?室

    06-18

  • 山东威达拟出资1.99亿元设立产业基金

    山东威达拟出资1.99亿元设立产业基金

    山东威达(26日)4月12日晚间发布公告:为实现产业运营与资本运营良性互动,公司拟作为有限合伙人与北京富唐航空投资管理有限公司合作共同发起设立广西南宁航县鑫达产业基金合伙企业(有限合伙),双方于4月10日签署了相关《合伙协议》。 据悉该基金认缴出资总额为2亿元人民币

    06-18

  • 芬香消客获中软国际近亿元融资

    芬香消客获中软国际近亿元融资

    据5月25日消息,CRM SaaS初创公司“芬香消客”宣布获得中软国际近亿元战略投资。

    06-18