避免双重含义
您故意选择了一个词,该词的含义不止一个,而第一个决定就是问题。对于程序员来说,有很多单词是有问题的。另一个例子是phone。您可以phone有人,也可以phone在口袋里放一个。
使用getter和setter
大多数对象的标准命名是属性的吸气剂/设置方法。
Battery.Charge // would be a property
Battery.setCharge(value) // would set the property
Battery.getCharge() // would get the property
属性是国家而不是名词
我认为您将对象属性归类为名词是错误的,并且变量也可能被认为是状态。它们是与其存在的地方范围相关的州。
您可以将它们持有的值描述为一个名词,但是我不确定在所有情况下都是正确的。
在OOP术语中,对象属性描述该对象的状态。在您的情况下Battery,它是一个对象,并且它Charge是一个状态。因此,这将是对象的属性,但这取决于如何使用它的上下文。
如果您需要能够给Charge电池供电,并且还知道电流Charge是多少,那么您就遇到了问题。
使用范围强制执行上下文
上下文可以澄清您打算传达一种方法或属性的单词的含义。范围是从对象外部设置属性/方法的可访问性。
Batter._charge // a hidden private property
Battery.setCharge(value) // would set the private property
Battery.getCharge() // would get the private property
Battery.Charge() // would perform the Charge action
方法是动词
您可以将对象的方法描述为动词,但“动作”一词更适合。在OOP术语中,您使用对象的方法对对象执行操作。从对象外部修改对象的属性是一种不好的形式。最好调用一个方法,该方法执行导致其状态改变的所需动作。
这个词Charge是一个动词,但它也是一个名词。当用于调用动作的方法时,很明显就是动词正在被使用Battery.Charge(....)。
但是,上下文非常重要。虽然该词Charge()是动词,但意义不如startCharging()。
为有效的方法Battery可能包括Charging,Discharging,setCharge,getCharge,hasCharge,Discharge和Charged。
简单的一个词方法往往没有明确说明他们的行动清楚,但也有一些情况下,像open并close在需要一点解释。
因此,如何命名这些类型的属性/方法并没有真正正确的答案。除了需要明智地使用上述技术以确保没有混乱之外。