正确的命名查询

时间:2009-11-18 14:20:54

标签: language-agnostic coding-style

我有两个函数的命名问题

  • 我有一个函数is_void,如果参数为“空”(在某种意义上),则返回true。你怎么称呼相反的功能? isnt_voidis_setis_not_void

  • 我有一对函数,第一个安装处理程序以捕获后续代码中的错误,第二个删除此处理程序。 install_error_handler/remove_error_handler看起来太长而且丑陋,我更喜欢一对短动词(比如看/不看)。

非常感谢任何想法。

感谢目前为止的答案

更新:我需要一个“非空”功能,因为它会像someArray.map(is_not_void)一样使用

第二个不能简单地“注册”或“安装”,因为它没有参数使用。

5 个答案:

答案 0 :(得分:3)

我不完全确定你为什么需要#1的不同功能;如果它不是空的,则is_void将返回false。

对于#2,如果您将错误处理程序传递给方法;安装/卸载应该足够了。

答案 1 :(得分:1)

回答问题的第一部分:作为一项规则,我避免使用函数名称中的否定词。类似的东西:

IsNotVoid( String s )

可能看起来无害,但总是会,你会做类似

的事情
if ( ! IsNotVoid( s ) && ! IsNotVoid( t ) )
{
}

......这将使下一个程序员认为太难以不能立即辨别出你的意图。

答案 2 :(得分:1)

测试功能是个好主意。但是,我警告不要使用否定命名,因为它会引发双重(或更多)负逻辑if (not is_not_void(a))。一个简单的非运算符就足够了:if (not is_void(a))

答案 3 :(得分:1)

一般来说,尽量(1)尽量减少接口函数的数量,(2)提供精确一致的名称。

在命名not is_void()的情况下,第一个原则告诉我们根本不存在该函数,因为用户总是可以否定布尔返回。换句话说,is_void()是一个约束检查函数,由调用者决定在必要时明确否定约束。

install_...remove_...案例是适用第二项原则的地方。短动词的问题在于它们非常模糊,但并不总是可以通过命名来消除歧义。最重要的是它们尽可能具有描述性,并且您应用了一些一致的方法。如果您使用watch_...unwatch_...,请始终使用它们。在watch_errors旁边没有observe_warnings。不一致将导致用户查找命名差异的原因。

就我个人而言,我更喜欢install_..._handleruninstall_..._handleradd_observer过滤条件优于watch_conditionunwatch_condition,因为 unwatch 对我来说,它看起来不像是真实的单词

答案 4 :(得分:1)

从您的更新中我假设您的意思是需要指向该方法的指针。我总是尽量使用名字,所以我先问自己is_void的含义是什么。在您的文字中,我建议is_emptyis_not_setis_nothing而不是is_void,对立面可以是is_not_emptyis_set或{{1} },最后一个听起来有点滑稽,但可能接近你代码中的含义。

我认为你不必防范过于冗长的命名,你必须注意过于简洁的命名,因为这往往是歧义的来源。

对于is_somethinginstall_error_handler,如果这些名称正确描述了目的,我会保留它们。如果没有尝试用你的代码描述它们的含义(保护,保护,锁定......)