Naming Conventions: What to name a method that returns a boolean?
我在C中有一个接口,可以帮助从服务器上的自定义存档中检索数据。界面如下:
1 2 3 4 5
| public interface IRetrieveData
{
bool OkToRetrieve(SomeData data); // Method in question...
bool RetrieveToLocal(SomeData data);
} |
此接口由将数据检索到本地数据库的客户端实现。有不同类型的客户机可以访问彼此的数据。因此,当处理组件在实际检索之前调用IRetrieveData.OkToRetrieve时,调用将转到客户机代码,在该代码中决定是否应检索数据。
此时,客户机可以返回假数据,跳过该数据块或返回真数据,处理组件调用RetrieveToLocal,并将数据发送给客户机,然后由客户机进行处理。
我感到困惑的是,是将方法OkToRetrieve重命名为仅Retrieve还是CanRetrieve,还是将其保留为OkToRetrieve。
有人有什么建议吗?
我认为返回布尔值的方法应该命名为"是-否"问题。
- 我喜欢is部分,但仅仅因为它是可检索的,并不意味着检索它是可以的。我叫它isOKToRetrieve。
- 当然。"is"前缀是我们团队的编码标准。
- 我要在Ariz的答案中加上一点(这是一个NitNoi),就是对函数检查的内容进行严格的区分…是否可以检索数据,或者当前代码是否可以检索数据,或者是否应该检索数据,等等,例如,如果函数正在检查数据的有效性,并在数据通过某些条件集时授权检索,则为isComplete()或isValid,或者isTransactionalyConsistent,或者是某些简明扼要地说,正在进行的"通过"检查的性质可能更具信息性。
- @bpayne-uhh如何将"is"用于诸如shelf.hasProducts()或body.contains刀()之类的内容?
- MX导弹:我将这些方法称为isEmpty()(如果货架上有限制,则称为isFull(),我绝不会使用containsKnife()方法,而是使用接受参数的contains()方法。是的,contains()是IS规则的一个例外。
- 我认为阿齐兹建议把它作为一个"是-否"的问题是正确的。所以,正如托马斯·欧文斯在上面所评论的那样,我将和伊索克托里耶夫()一起去。
- @bpayne很公平,我假设isEmpty()和isFull()将包含参数,如果shelf可以包含超过"products"?
- @阿齐兹,这似乎是一个流行的公约,所以,但出于某种原因,我不知道为什么,有一些东西我不喜欢它。
- 将函数命名为语句,而不是"是/否"问题。IsRetrievable可以被解释为一个缩写词"它是可检索的吗?"这是一个实际的是/否问题,或者"它是可检索的",这是一个陈述。我将使用后者,从那时起,如果语句读起来更好。另一个更明显的例子是:if AreFiltersTheSame(x,y)使用是/否问题,if FiltersAreTheSame(x,y)使用语句。我更喜欢后者,因为它读起来更好(尤其是对于有许多条件的长if语句)。不过,在你的情况下,IsRetrievable作为一项声明是可以接受的。
- @具有许多条件的magne long if语句应该被重构,因为不清楚代码的作用。当你有三元myVar = FiltersAreTheSame(x,y) ? 1 : 0的时候,你怎么看?
- @Frederikkrautwald是的,它可能应该被重构,但通常不是,所以不管你喜欢与否,人们可能都必须处理它(由于其他开发人员没有重构,或者你没有花时间重构他们的代码)。三元读物也不好。好点。不过,我看到经常使用的if语句,所以我倾向于对此进行优化。
Allways用类似于可以回答"是"或"否"的问题的名称命名布尔方法。
在您的情况下,canretrieve将是一个好名字(只是使用您自己的建议)。
- can号!=should。客户代码并不能阻止您检索它,只是建议使用,因此我认为ShouldRetrieve是一个更好的名称,正如@dannie.f建议的那样。
使用前缀"应该"怎么样?
1
| ShouldRetrieve(SomeData data); |
- 这是imho的最佳答案,因为名称准确描述了方法返回的信息。这是一种建议,而不是一种能力。
取决于您的用例。我喜欢在它们前面加上"is"、"do"或"can"等词:IsSomePropertySoAndSo、DoesNounSupportFeature,以CanVerb为例。
在这个特定的案例中,我可能会把它命名为:
1
| public bool IsReady (SomeData) |
因为它更清楚地说明了一旦返回true会发生什么。
方法意味着行动。因此,我更喜欢方法名以动词开头。怎么样?
1
| CheckIsRetrievable(SomeData data) |
- "is"是一个动词…
- 这取决于"是"这个词的含义。
- @马赛拉莫斯的"is"并不是暗示"check"或"collect"之类的动作,而是一种状态。
- if(IsRetrievable(data))imho读起来比if(CheckIsRetrievable(data))好得多。我认为if子句是布尔返回函数最常用的地方。
- 我真的不喜欢在方法的前缀处使用check。听起来有点多余
如果您正在进行更多检查,并且isretrievable()不合适,可以使用:
通常,方法/函数表示动作,因此它们应该以动词作为前缀。例如检查、获取、制作等。
布尔变量的常见命名约定是在它们前面加上帮助动词,例如is、do、will、can。
我认为这两个约定的结合将产生一个非常好的、有辨别力的模式。所以getIsRetrievable()或checkIsRetrievable()对我来说非常好。
在命名约定中,方法名应该是动词
在函数和方法应该是动词的惯例下,我更喜欢isoktoretrieve或isretrieveok而不是没有"is"的变体。
我听上去很好。我见过微软API中使用的can-stem。唯一的另一个真正的选择IMO是可行的(从阿齐兹),这似乎太语言扭曲了!
如果结果由用户的权限/访问决定,那么MayRetrieve()可能是更好的名称。
IsRetrievable()更加含糊不清,如果除了许可之外还有其他考虑,或者除了许可以外,可能更为合适。