你是否将名词用于表示可调用对象的类名?

Vik*_*kas 6 coding-style callable functor

这里有一个更通用的问题.将此视为对此的扩展.

我理解类代表对象的类型,我们应该使用名词作为名称.但是,许多语言支持的函数对象更像是函数而不是对象.我应该将这些类别命名为名词,或者在这种情况下动词是否正常.doSomething()从语义上讲,比说更有意义Something().

更新/结论

我得到的两个最高投票答案分享了一个混合的意见:

阿提拉

然而,在仿函数的情况下,它们代表"动作",因此用动词(或某种名词 - 动词组合)命名它们更合适 - 就像你根据它正在做什么命名一个函数一样.

另一方面,仿函数的实例实际上是一个函数,也许可以更好地命名.按照Jim的建议,SomethingDoer doSomething; doSomething();

在经过一些代码之后,他们两个似乎都是常见的做法.在GNU实现STL的,我发现类,如negate,plus,minus(位/ stl_function.h)等.并且variate_generator,mersenne_twister(TR1/random.h).类似地,在升压我发现类,如base_visitor,predecessor_recorder(图/ visitors.hpp)以及inverse,inplace_erase(ICL/functors.hpp)

Att*_*ila 5

对象(以及类)通常代表“事物”,因此您想用名词命名它们。然而,在函子的情况下,它们代表“动作”,所以用动词(或某种名词-动词组合)命名它们更合适——就像你根据函数的作用来命名函数一样。

一般而言,您会希望按照它们的用途来命名事物(对象、函数等),即它们在程序/世界中代表什么。

您可以将函子视为具有状态的函数(因此是“动作”)。由于实现这一点的干净方法(具有与您的“动作”相关联的状态)是创建一个存储状态的对象,因此您将获得一个对象,这实际上是一个“动作”(一个奇特的函数)。

请注意,以上内容适用于可以创建纯函子的语言,即调用与常规函数相同的对象(例如 C++)。在不支持这的语言中(也就是说,您必须有一个方法而不是operator()被调用的方法,例如command.do()),您可能希望将类似命令的类/对象命名为名词,并将该方法命名为动词。