程序中好的命名

2024-04-03 09:48
文章标签 程序 命名 中好

本文主要是介绍程序中好的命名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:选个好名字吧

我们对变量进行命名,最主要的原因不是为了让机器能够更好的执行,机器说:我无所谓,只要正确就行。 我们是让人更好的去读程序。所以,如果一段代码里面都是xx, y, i,r之类的变量,那么过几天你自己都看不懂了,更不要说别人。

所以看下面两段代码:

本质上机器都可以执行,但是要让人看懂,显然后者成本更低:

x = x -xx
xxx = fido + salesTax( fido );
x = x + LateFee(x1, x) + xxx;
x = x + Interert(X1, x);balance = balance - lastPayment;
monthlyTotal = newPurchases + SalesTax( newPurchases );
balance = balance + LateFee( customerID, balance ) + monthlyTotal;
balance = balance + Interest( CustomerID, balance);
//balance在英语中是余额的意思  Interest是利息的意思

以问题为导向

  以问题为导向,要解决这是什么问题,而不是如何解决。如果一个变量偏向计算,而不是偏向问题,那么它不是以描述问题为导向,而是以解决问题为导向,这是不好的。

一个员工的数据记录:inputRec 和employeeData

一个打印机的状态:  bitFlag  和printerReady

会计应用中:calcVal  和sum

上面删除的这三个都是以计算为导向的,而不是以描述为导向的。

命名长度

 长度不能太短,否则描绘不出变量的意义,不能太长,否则读的时候太费劲,降低效率。

计算限定词

诸如:Total,Sum,Average,Max, Min,Record,String, Pointer都是限定词。 好的策略是把它们都放在后面,这样整齐划一,而且最主要的是前面的名字是我们最重要的信息。

对称的词语

一组对称的词送给大家,可以让程序清爽

begin/end
 first/last
 locked/unlocked
min/max
 next/previous
 old/new
 opened/closed
 visible/invisible
 source/target
 source/destination (less common)
 up/down

2:特殊名字

命名循环变量:

循环很常见,所以对循环的命名很重要。在谭浩强老师经典书籍《c程序设计》当中,循环基本使用的诸如i,j,k之类的变量。这在小规模的情况下还可以,但是一定要注意,但是下面几种情况就不应该使用了:

如果循环变量在循环外边使用,比如计数  recordCount 

嵌套循环, score[teamIndex][eventInde]要比score[i][j]更容易懂

所以,对于循环,只有一两行的时候可以使用i,j之类的变量,其他情况使用能够代表其名字的变量,以Index结尾的变量好一些。

命名标志性变量

最容易想到的变量名称是flag,我也多次使用,好一点的是加一些说明,如statusFlag,printFlag...但是,这些都不建议使用,因为它没有告诉我们变量更多的信息。并且在赋值的时候我们不知道这些变量是在做什么,赋的什么值。

if( statusFlag & 0x0F)...    statusFlag = 0x80

if( printFlag & 16 )...        printFlag = 16

if(computeFlag == 0)...   computeFlag=0

解决第一个问题,就是把变量命名修改掉,解决第二个问题,可以使用枚举类型,这样程序更加耐读

if ( dataReady ) ...        dataReady = True;
if ( characterType & PRINTABLE_CHAR ) ...       characterType = CONTROL_CHARACTER;
if ( reportType == ReportType_Annual ) ...       reportType = ReportType_Annual;
if ( recalcNeeded == True )                              recalcNeeded = False; 

如下是枚举类型

// values for CharacterType
const int LETTER = 0x01;
const int DIGIT = 0x02;
const int PUNCTUATION = 0x04;
const int LINE_DRAW = 0x08;
const int PRINTABLE_CHAR = ( LETTER | DIGIT | PUNCTUATION | LINE_DRAW );const int CONTROL_CHARACTER = 0x80;// values for ReportType
enum ReportType {
ReportType_Daily,
ReportType_Monthly,
ReportType_Quarterly,
ReportType_Annual,
ReportType_All
};

命名临时变量

我们对于临时变量的态度其实是比较松懈的,临时的嘛,随便起一个名字,比如下面计算一元二次方程:

// Compute roots of a quadratic equation.
// This assumes that (b^2-4*a*c) is positive.
temp = sqrt( b^2 - 4*a*c );
root[0] = ( -b + temp ) / ( 2 * a );
root[1] = ( -b - temp ) / ( 2 * a );

其实它是有意义的,这个计算方式叫做判别式,所以下面的命名比较好。

discriminant = sqrt( b^2 - 4*a*c );
root[0] = ( -b + discriminant ) / ( 2 * a );
root[1] = ( -b - discriminant ) / ( 2 * a );

所以,对待临时变量,我们不能够随便命名。

命名布尔类型变量

布尔类型变量的命名应该体现它的类型含义,让我们看到这个名字就知道这是一个布尔类型变量,即变量的取值要么为True要么为False。所以,诸如done, error,found, sucess很合适。其它不能反映其有二值的变量名是不适合采用的。

考虑将名称转化为布尔类型,前面加is,后面加ok。

另外最好不要使用否定的变量名,if not notFound 会使得我们很难理解。

非正式命名规则

使用命名规则一个是给自己看的,另外一个是给别人看的给自己看的情况是:在一段时间以后需要再进行修改,然后你会发现,自己都看不懂自己写的什么了,各种变量i,j等等,非常糟糕。同样项目较大的时候,糟糕的命名让项目理解很困难。当给别人看的时候:要交给别人维护,要和别人一起合作,当别人要审核或者测试你的代码的时候。

一些非正式命名规则:

全局(global)变量前面加 g_

成员(member)变量前面加 m_

类型(type)名称前面加t_ (猜测类型和类差不多,是自己定义的类型)

常量(constant)前面加c_

枚举(enumeration)前面加e_

java中的一些命名规则


python中的一些命名规则

 Python命名规则

其他规则

增加前缀与缩写长的名称都是不错的选择

在避免使用的名称当中有几个注意事项:避免使用相似含义的名称。 input和inputValue表达的意思差不多。currentUserNameList和userNameList也差不多。


总结:

  每种语言都有每种语言特定的命名规则,python中多使用下划线和小写字母的组合,java中多使用驼峰结构。其实,重要的不是用什么样的结构,重要的是好的命名是给人看的,能够让人更好的阅读,能够展现变量的意义。

参考:

  代码大全




这篇关于程序中好的命名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/872577

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati