如何正确理解软件开发中的”见名知意“? 通常的理解是,定义名称时使用英文翻译,以达到见名知意的效果,但是我们发现有一些情况,并不好翻译,例如:
1.结果命名
public void method(){
boolean cat=true;
boolean pig=false;
boolean dog=false;
boolean duck=true;
boolean 某=cat & pig; //发现对象是多种因素的组合结果,不好翻译
boolean 某某=dog & pig;//发现对象是多种因素的组合结果,不好翻译
boolean 某某某=(duck & cat) || pig;//发现对象是多种因素的组合结果,不好翻译
if (某 & 某某 & 某某某){
// TODO: 2023/3/11 满足三个条件,就执行某个事情
}
}
此时,我们发现对象是多种因素的组合结果,不好翻译,所以简单的理解为见名知意=翻译是不行。这种情况,我们应该这样定义:
2.用途命名
public void method(){
boolean cat=true;
boolean pig=false;
boolean dog=false;
boolean duck=true;
boolean condition1=cat & pig; //条件1
boolean condition2=dog || pig;//条件2
boolean condition3=(duck & cat) || pig;//条件3
//这里可能还有几百行代码......
if (condition1 & condition2 & condition3){
// TODO: 2023/3/11 满足三个条件,就执行某个事情
}
}
这样的定义方法,可以避开结果翻译的窘境,也可以很好的看出这三个变量的用途,更重要的是可以很清楚的看出condition1、condition2、condition3属于同一用途,与其他变量有鲜明的差别。
3.表达式命名
当我们的代码中出现计算时,可以用小写字母把计算结果整理成公式,再给每个字母赋值,这种方式既不是结果翻译,也不是用途翻译,却能清晰看出其中的逻辑。例如:
public int getData(){
int cat=12;
int pig=23;
int dog=67;
int duck=34;
int a=cat+dog;
int b=pig+45-duck;
int c=dog-pig;
return a+b-(c/4);
}
4.应该避免笼统命名
在开发中,我们经常看见有些类名字很笼统,比如有些类叫:MyLog、MyData、MyView等等,代码越来越多之后,我们发现My不知道是谁,你可以是My,我可以是My,他也可以是My,甚至你调用一个类,发现该类有好几个同名类。
导致容易出现导报错误问题。
5.应该避免命名太宽泛
在开发中,我们经常看见有些类名字过于宽泛,比如SystemInfo、AliBaBaInfo、TennerInfo,这种类名看不出用途,完全不利于代码阅读。