【问题标题】:Proper naming query正确命名查询
【发布时间】:2009-11-18 14:20:53
【问题描述】:

我的两个函数有命名问题

  • 我有一个函数is_void,如果参数为“空”(在某种意义上),它会返回 true。你会如何调用相反的函数? isnt_void? is_set? is_not_void?

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

非常感谢任何想法。

感谢到目前为止的回答

更新:我需要一个“不是无效”的函数,因为它会像someArray.map(is_not_void)一样使用

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

【问题讨论】:

    标签: language-agnostic coding-style


    【解决方案1】:

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

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

    【讨论】:

    • 酷,我还没有完全卖掉#1;你不能做这样的事情: someArray.map(!is_void()) 至于 2;我认为你被 install/remove_error_handler 卡住了
    【解决方案2】:

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

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

    install_...remove_... 的情况适用于第二个原则。短动词的问题是它们非常模棱两可,但并不总是可以通过命名来消除歧义。最重要的是它们尽可能具有描述性,并且您应用了一些一致的方法。如果您使用watch_...unwatch_...,请始终使用它们。不要将watch_errorsobserve_warnings 放在一起。不一致会导致用户寻找命名差异的原因。

    就个人而言,我更喜欢 install_..._handleruninstall_..._handleradd_observer 过滤条件而不是 watch_conditionunwatch_condition 只是因为 unwatch 看起来不像一个真正的单词 在我看来。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        从您的更新中,我假设您的意思是您需要一个指向该方法的指针。我总是尝试使用尽可能清晰的名称,所以我会先问自己is_void的含义是什么。从你的文字中,我建议is_emptyis_not_setis_nothing 而不是is_void,相反的可能是is_not_emptyis_setis_something,最后一个听起来有点有趣但可能会接近根据您的代码中的含义。

        我认为您不必提防过于冗长的命名,您必须注意过于简洁的命名,因为这通常会导致歧义。

        至于install_error_handleruninstall_error_handler,如果这些名称正确地描述了用途,我会保留它们。如果不尝试根据您的代码描述它们的含义(守卫,保护,锁定......)

        【讨论】:

          【解决方案5】:

          回答您问题的第一部分:通常,我避免在函数名称中使用否定词。比如:

          IsNotVoid( String s )
          

          可能看起来足够无害,但总是会做类似的事情

          if ( ! IsNotVoid( s ) && ! IsNotVoid( t ) )
          {
          }
          

          ...这会让下一个程序员想得太难以至于无法立即辨别你的意图。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-26
            相关资源
            最近更新 更多