笔者之前的文章,提到了 Clean ABAP 编程规范。
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md
Clean ABAP 规范里提到了一个准则:给类或者变量命令时,避免使用 data,info,object 这些 Noise Words(干扰词).
命名规范里举了一些例子:
-
使用 account 而不是 account_data
-
使用 alert 而不是 alert_object
-
使用 user_preferences 而不是 user_info
-
使用 response_time_in_seconds 而不是 response_time_variable
Noise words
通常是那些在变量名中不增加任何有价值信息的词语。它们常见于开发者在试图让变量名听起来更"正式"或者"复杂"时添加的额外词汇。
然而,这些词语除了增加了代码的冗长性之外,并没有实际帮助理解变量的用途或意义。
常见的 noise words
包括 data
, info
, flag
, temp
, object
等。
这些词语之所以被称为 noise words
,是因为它们没有为变量名添加任何明确的语义。如果一个变量名中的这些词语被去掉,而变量名仍然能够传达其核心意义,那么这些词就是多余的。
真实世界的例子
在理解 noise words
这一概念时,通过一些具体的例子来分析其影响可以更加直观。
案例 1:data
和 info
String userData;
String userInfo;
在这个例子中,userData
和 userInfo
看起来似乎是有意义的变量名,但它们实际上是含糊不清的。这些变量名并没有明确地传达出它们具体包含的信息是什么。假设 userData
包含的是用户的详细信息,而 userInfo
包含的是用户的基本信息,那么更好的命名方式可以是:
String userDetails;
String userBasicInfo;
这里,userDetails
和 userBasicInfo
更加明确地表达了它们各自的内容,从而减少了开发人员在阅读代码时的认知负担。
案例 2:temp
tempValue = calculateTemperature();
tempValue
是一个常见的 noise word
,因为 temp
这个词本身可以有多种含义,比如温度、临时值等。通过上下文可能可以理解这个变量是用于存储温度,但更好的命名方式是直接使用 temperature
作为变量名:
temperature = calculateTemperature();
这个例子中,去掉了 temp
这个词,使得变量名更加明确直接。
案例 3:object
CustomerObject customerObject = new CustomerObject();
在这个例子中,CustomerObject
这个变量名和类名都包含了 object
这个 noise word
。实际上,object
并没有为变量名增加任何新的信息。更好的做法是简化变量名为:
Customer customer = new Customer();
这样,变量名更加简洁易懂,并且 Customer
这个词本身已经足够清晰地表明了其类型和用途。
规避 Noise Words
的实践
为了避免在代码中引入 noise words
,开发人员可以采用以下几种策略:
1. 简洁明了:
变量名应当简洁明了,直接表达变量的用途。应尽量使用描述性强且不含糊的词汇。例如,与其使用 data
,不如直接使用 details
, count
, list
等更具描述性的词汇。
2. 审视上下文:
变量名应当考虑上下文。例如,如果在一个处理客户数据的函数中,customerDetails
这个变量名可能是冗余的,因为函数本身的上下文已经明确了这些数据是关于客户的。在这种情况下,可以简单地将变量名命名为 details
。
3. 避免重复信息:
如果变量名已经传达了足够的信息,就不需要再添加额外的词汇。例如,在一个用户类的实例化变量中,不需要再使用 userObject
这种命名方式,user
或者 customer
已经足够表达其含义。
4. 团队命名规范:
建立团队级别的命名规范,可以帮助开发团队避免 noise words
的使用。这种规范应当明确哪些词汇是不必要的,并提倡使用哪些词汇来替代。
5. 代码审查:
在代码审查过程中,可以专门关注变量命名问题,确保没有 noise words
被引入。通过这种方式,团队可以共同维护代码的整洁性和可读性。
结论
Noise words
在变量命名中虽然看似无关紧要,但实际上会对代码的可读性和可维护性产生深远的影响。通过剔除这些冗余词汇,开发人员可以编写出更加简洁、清晰和易于理解的代码。