布尔方法的命名:是vs.可以vs.?


51

对于返回布尔值的方法,哪个名称更好?

IsSupportContentType

要么

CanSupportContentType

9
由于名称的意图是清楚地传达状态或行为,并且您永远不会说“此类是支持内容类型X”,因此更好的名称是CanSupportContentType。您可能会说类似“此类可以支持内容类型X”。
Craig

8
不是母语的人,但不会有没有 SupportContentType最“语法”选项?
罗曼·赖纳

8
首先必须IsSupportedContentType在语法上是正确的。(除非“支持内容类型”充当名词,这似乎不太可能)
CodesInChaos

30
那简单supportsContentType吗?以下内容完全可读:if (abc.supportsContentType("text/html"))。“可以支持”表示存在进一步的条件来支持内容类型。
奥利维尔·格雷戈尔

10
@WeylandYutani IsCanHasSupportCheezburger吗?
RM

Answers:


106

是vs.可以

根据Microsoft命名约定的建议,“ Is”和“ Can”都可以作为布尔值的前缀(“ Has”也可以)。

用简单的英语来说,“ Is”将用于识别有关类型本身的某些内容,而不是它可以做什么。例如IsFixedIsDerivedFromIsNullable都可以在CLR类型和方法发现。在所有这些情况下,“ Is”后跟一个形容词

同时,“可”更清楚地表明一种能力,例如CanEditCanReadCanSeek。在以上每种情况下,can后面都跟有一个动词

由于“支持”是一个动词,因此我认为您的情况CanSupportContentType更好。

更短的选择

另一方面,约定说前缀是可选的。此外,在方法名称中包含参数类型是一种俗气的做法,因为开发人员可以在智能感知中看到参数的类型。因此,您可以只命名方法Supports并按如下方式定义它:

public bool Supports(System.Net.Mime.ContentType contentType)

...虽然更短,但仍然清楚地传达了目的。您可以这样称呼它:

ContentType contentType = new ContentType("text/plain");
var someClass = new MediatorsClass();
bool ok = someClass.Supports(contentType);

或者作为折衷方案,也许这是最好的:

public bool CanSupport(System.Net.Mime.ContentType contentType)

53
读起来很好,很不错:if ( someClass.Supports(contentType) )
candied_orange

5
…或hasSupportedContentType
Bergi '17

8
一种叫做“ CanSupports”的方法使我不知道是谁花了时间使软件能够支撑罐头(例如锡罐)。毫无疑问,仅“支持”是更好的选择!
T. Sar-恢复莫妮卡

6
有时开发人员无法分辨什么时候听起来“很奇怪”,例如英语不是他们的第一语言。
吴敬Wu

4
有时短版本会更糟。例如,在C ++标准库中std::vector::empty()。仅从名称中,它会清空载体吗?还是返回向量是否为空?实际上是后者,因为前一个任务是由完成的std::vector::clear()。但是您通常必须阅读文档才能确定。作为相反的示例,QVector在这方面Qt 更易于理解,因为Qt 检查空性的方法是QVector::isEmpty()
罗斯兰

9

值得一提的是,还可以使用“ 应该 ”前缀。根据Apple的指导原则,模态动词通常不仅可以使用“ 可以 ”和“ 应该 ”来命名返回布尔值的函数。我看不到“ will ”的许多用法,但是“ should ”非常适合咨询建议的挂钩,如reactjs所示:

shouldComponentUpdate: (newProps: any) => boolean

19
应该是恕我直言,我的名字很糟糕,“嗯,它应该关闭文档,但我实际上不太确定”
Lovis

1
@lovis:我认为Harry的评论非常有效。例如,我可以通过一个插件层委派一些与数据库相关的操作,每个插件都有一个“ ShouldCloseConnection”方法,该方法通知框架应该执行一些清理工作。只是一个例子,但“应该”绝对是有效的前缀。
greg

1
@greg怎么比这没有歧义WillCloseConnection
基本

@Lovis我们通常使用is...should...在某些函数参数名称中使用boolean表示函数应将其更改为的位置。如果一个函数可以选择性地关闭文件,调用参数来控制这isClosed将是准确的(没有关闭,)等,我们将使用shouldClose以表明这是个什么功能是应该做的。(任意示例;我们不太可能具有这样的功能,特别是因为关闭文档应该足够重才能进行专门的调用。)
KRyan

@Basic至少在我们的情况下,will...保留用于返回promise的异步函数;如果我之前的评论中描述的功能是同步的,则使用will...将与我们的命名不一致。
KRyan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.