函数返回布尔值时的命名规范是什么?

8
以下函数名称是常规的:返回布尔值的函数的命名约定可能会让非英语母语者感到困惑。
bool is_valid();
bool is_sorted();
bool is_empty();
bool has_children();
bool can_draw();

然而,我想知道是否其他以动词开头而不是“is, are, can, has”等的函数名称也像以下内容一样传统:
bool TryToCloseWindow();    // check to see if the user tries to close the window
bool IntendToCloseWindow(); // as above
bool FileExists();          // check to see if the file exists

如果你是以英语为母语的程序员,你认为这三个函数名是否常规?


1
从C语言派生的编程语言(例如C++和Java)没有固定的命名约定。这很大程度上取决于个人或组织。不同的人/组织有不同的命名风格。 - Some programmer dude
我想知道最后三个是否自然。 - xmllmx
1
WIN32 API有几个函数的名称与最后三个类似。但如果你正在编写自己的代码,那么你完全可以决定如何命名和格式化标识符。选择一个适合自己舒适的风格,甚至可以在不同的项目中更改风格。只需在单个项目中保持一致的样式即可。 - Some programmer dude
我的真正问题是:最后三个句子是否听起来像母语为英语的人说的自然。 - xmllmx
如果您对布尔函数和属性在源代码中实际使用的动词感兴趣,请查看http://source-code-wordle.de。 - Markus Meyer
我认为这取决于上下文。如果该函数是类的一部分,那么一定要遵循Java的约定,以is开头表示布尔类型,例如Window aWindow(); if( aWindow.isClosing()); File aFile(); if(File.isExisting()); 否则,以名词开头:if(windowIsClosing); if(fileExists); 除了用户类之外,避免提及用户,否则你会得到奇怪的布尔值,例如:if (userIsAskingForAfile())。 - Mohamed ElNakeep
3个回答

9
你的标题问题的简短回答是:不同。可能有比程序员更多的约定俗成。有些约定要求每个返回布尔值的函数名称以“is”开头,而其他约定则不需要。不要纠结于下划线、驼峰命名法、小驼峰命名法等。只要你坚持选择一个,它们都同样易读。
我认为重要的是函数名称表达它们正在做的事情。返回布尔值的函数通常出现在条件语句或循环语句的上下文中。因此,我认为最好将你打算使用的名称放在这样的上下文中,并查看它是否听起来正确。例如:if (fileExists()) { /* ... */ }听起来不错。tryToCloseWindow()听起来像“嘿,编译器/程序,关闭那个窗口吧”。你的注释暗示了这不是你想要的。也许使用'userIsClosingWindow()'或类似的东西。"intend"不是我会用于函数名称的动词。打算做某事意味着你想做某事,你有这个想法,你在考虑它,但没有真正的行动。因此,如果你打算关闭一个窗口,就去做吧,或者把它留下。没有必要告诉编译器“嘿,我打算关闭那个窗口,在几行代码后,也许我会真正地做到...”。除非用户插上了他的 Microsoft Mindreader 设备到 USB 端口并且你有访问 API 的权限,否则你无法确定用户是否打算关闭一个窗口。如果有,请给我发送链接,谢谢;)

1
通常情况下,命名规范应该像以下这样以小写字母开头。
bool tryToCloseWindow();    // check to see if the user try to close the window
bool intendToCloseWindow(); // as above
bool fileExists();          // check to see if the file exists

1

如果您使用像isValid()这样的名称,它会更有意义。

它将返回值truefalse,因此对于if(isValid()) ...,任何人都可以轻松理解概念。

通常,并非所有组织都遵循相同的命名约定。这取决于公司和开发人员。


我只想知道最后三个是否传统。 - xmllmx
如果你使用以下这种方式:bool IsTryToCloseWindow();
bool IsIntendToCloseWindow(); bool IsFileExists(); 那么它更加常规化。
- andy
2
这些名称在语法上不正确。 - xmllmx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接