简化代码变量命名

好好学习321
  • 171
Array.isArray(validationArr[option.name]) ? validationArr[option.name].push({a:1}) : validationArr[option.name] = 1

这种情况下,将const validationTmp = validationArr[options.name]

代码改造成

Array.isArray(validationTmp) ? validationTmp.push({a:1}) : validationTmp = 2

如果在其他位置,离定义变量位置更远的地方出现,这个validationTmp如何命名,才能做到明确这个变量只是个替代品,临时变量,

回复
阅读 907
5 个回答

根据业务需要,写个贴切业务的名称。
比如这里是商品列表名称,const productsList = validationArr[options.name]

但看你意思,你说是“临时变量”,js会自动GC,我认为不存在临时变量的说法。
如果只是一个起标记的作用,可以考虑以 _ 开头,一般表示内部私有变量,不妨这里用 _validationTmp 来表示“临时变量”。

规范不是死的,做到统一也是一种规范。

当你在全局作用域定义常/变量的时候,语义上它就不是“临时”的了,所以这个问题没什么好纠结的。
倒不如考虑一下编码风格的事情,我认为在编程中,一个很好的编码习惯是:尽量避免创建作用域很“宽”的量。也就是除了一些规定的常量之外,所有的“临时”常量和变量都只在函数里创建,并且每个函数代码行数不宜过多,不用滚动屏幕就能显示完。这样就不会出现你担心的“在更远的地方出现”的问题了。
多个函数里可以访问的常量一般用来表示某种约定的东西,建议采用大写命名,例如后端给的某个接口的 URL ,类似 GET_USR_NAME_BY_IDS

1.变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。

2.第一个字母不能是数字,例如2Lerver这不是一个合法的C++变量。

3.不能是c++关键字,例如不能用class这个单词来命名一个变量。

4.区分大小写,例如iA和ia是两个不同的变量。
理论上,在遵守了上面几条规则的前提下,所声明的变量名称都是合法的。比如下面的命名:
char xueshengming[20]; //学生名
char a; //命名一个字符,但变量名毫无意义

这样的变量命名尽管是合法的,但可读性非常差。正规的软件公司,对于变量命名往往都有自己的一个推荐规范。不同公司的规范又会有一些差别。当一个程序员从一个公司跳槽到另一个公司,甚至会出现不习惯新公司代码规范的现象。
万事万物,要是有一个统一的规范,也许程序员这个行业会少一些烦恼。俗话说得好:没有规矩,不成方圆。以下是笔者多年编码得出的变量命名的心得体会,在此总结如下,并奢望有招一日能成为行业规范。
变量命名的宗旨:

一、用最短的字符表示最多的意义。
int iPosX; //Pos表示位置,X表示横坐标 //个人比较喜欢用n做前缀

二、使用变量前缀

在变量前带上小写前缀可以很直观的看出变量的数据类型,而不必到变量的定义处去查看。常用的数据类型推荐变量前缀:

1.整型的前缀
short sValue; //s为short的前缀 int iAge; //i为int的前缀
unsigned int uiAge; //ui为unsigned int的前缀(两个单词的首字母) //也有用u做前缀的
long lValue; //l为long的前缀 2.浮点型的前缀
float fScore; //f为float的前缀

1.变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。

2.第一个字母不能是数字,例如2Lerver这不是一个合法的C++变量。

3.不能是c++关键字,例如不能用class这个单词来命名一个变量。

4.区分大小写,例如iA和ia是两个不同的变量。

理论上,在遵守了上面几条规则的前提下,所声明的变量名称都是合法的。比如下面的命名:
char xueshengming[20]; //学生名
char a; //命名一个字符,但变量名毫无意义

这样的变量命名尽管是合法的,但可读性非常差。正规的软件公司,对于变量命名往往都有自己的一个推荐规范。不同公司的规范又会有一些差别。当一个程序员从一个公司跳槽到另一个公司,甚至会出现不习惯新公司代码规范的现象。
万事万物,要是有一个统一的规范,也许程序员这个行业会少一些烦恼。俗话说得好:没有规矩,不成方圆。以下是笔者多年编码得出的变量命名的心得体会,在此总结如下,并奢望有招一日能成为行业规范。
变量命名的宗旨:

一、用最短的字符表示最多的意义。
int iPosX; //Pos表示位置,X表示横坐标 //个人比较喜欢用n做前缀 二、使用变量前缀
在变量前带上小写前缀可以很直观的看出变量的数据类型,而不必到变量的定义处去查看。常用的数据类型推荐变量前缀:

1.整型的前缀
short sValue; //s为short的前缀 int iAge; //i为int的前缀
unsigned int uiAge; //ui为unsigned int的前缀(两个单词的首字母) //也有用u做前缀的
long lValue; //l为long的前缀

2.浮点型的前缀
float fScore; //f为float的前缀
double dValue; //d为double的前缀

3.字符型的前缀
char cChar; //c为char的前缀 //个人喜欢用a做前缀
TCHAR tcChar //多字节字符和Unicode字符兼容类型的前缀tc wchar_t wcChar //宽字符前缀wc

4.字符串的前缀
char szName[30]; //sz为C语言字符串的前缀 string strName; //str为C++字符串变量的前缀 CString strInfo; //str为MFC字符串变量的前缀

5.布尔型的前缀
bool bPass; //b为bool的前缀

6.指针型的前缀
int *pValue; //p为指针的前缀
说明:由于指针是指向一定数据类型的变量,因此p后面要不要再加一个前缀一直让我举棋不定。如果再加上前缀比如: int * piKey;
char * pszInfo;
这样似乎意义更完整,但势必会增加变量的字符长度。因此,这里就不硬性规定了。但是,指针变量以p开头应该是雷也打不动的。

7.数组的前缀 int arrNum[10]; //arr为数组的前缀

说明:和指针变量一样,arr后是否再加数组元素的数据类型前缀取决于你自己。 string arrstrName[3]; //C++字符串数组,加上去似乎很别扭

8.枚举变量的前缀
enum emWeek; //em为枚举变量的前缀

9.结构变量的前缀:t
T_NODE tNode; //结构名称以T_开头 10.字节变量的前缀:by BYTE byInfo;

10.字节变量的前缀:by BYTE byInfo;

11.字变量的前缀
DWORD dwInfo; //双字 WORD wInfo; //单字

12.字符指针的前缀
LPCTSTR ptszInfo; //ptsz表示前缀,t表示TCHAR类型 LPCSTR pszInfo; LPSTR pszInfo;

13.STL容器类型前缀 vector<int> vecValue;
说明:vec表示vector容器的前缀,为了简化变量,变量体后面不再使用前缀 list<double> lstInfo;

14.MFC绑定控件变量的前缀
CEdit m_ctlName; //对象变量,变量体前统一用ctl表示 //个人喜欢用m_ctrl
int m_iAge; //值变量,变量体有表示值数据类型的前缀
说明:由于长短指针在32位操作系统后已无区别,所以不再区分,一律以p开头,这也与指针变量以p开头的原则贴得更近。

15.矩形结构的前缀:rc RECT rcClient; CRect rcWin;

16.句柄对象一律以h开头 HWND hWndName; HBRUSH hBr; HPEN hPen; HBITMAP hBmpBack;

17.windows颜色类型的前缀:cr COLORREF crFront;

18.windows中DC(设备上下文)类型的前缀 CClientDC dcClient;

三、类的成员变量以m_开头,后面为变量体,变量体依然要有前缀。

int m_iDepth;

四、定义一个变量,为了简化,在不影响变量意义的情况下,可以仅仅使用前缀。 RECT rc;

五、全局变量一律以g_开头,后面为变量体,变量体依然要有前缀。 int g_iNums;

六、定义结构体为了保证和C语言和C++的写法兼容性,一律采用typedef语句。 typedef struct tagINFO_NODE {
int iData;
tagINFO_NODE pNext; }T_INFO_NODE, PT_INFO_NODE;

七、变量体如果是多个单词,每个单词的首字母大写。 int iStudentAge;

八、在意义明确的情况下可以仅仅使用首字母命名变量可以缩短变量名。 int iID;
说明:仅使用首字母表示变量体的前提是保证变量的意义,比如变量iStudentAge如果声明成:
int iSA; //这样将失去意义,不可取

九、定义一个类使用C作为类名的前缀。 class CStudent { … };

引用:https://blog.csdn.net/u012314...

可以认为,局部变量都是临时变量,所以不用强调“临时”,正常命名就好。

另外,validationTmp 重新赋值不会影响数组元素,但 .push() 会,所以这里两中情况下行为不一致,需要确认是否逻辑错误。

建议命名 validationElement 或者 validatonRule 或者就是简单的 rule,根据在业务中的实际意义来命名。

提供个不同的思路:利用 block + let 进行隔离,这样同个变量名在不同的作用域内有同样的含义但实际值不同且不会相互影响。

var validation = 'x'

{
      let validation = 'y'
      // ...
}

assert(validation == 'x')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏