我知道这听起来像是一个主观的答案,但我会尽量使问题尽可能客观,因为对这个问题的客观答案将是最有帮助的。
我最近有一位代码审查员指出,我习惯在我的方法结束时加入介词。这是我最近编写的一种方法,作为扩展方法 Point
类:
var rectangle = new Rectangle(0, 0, 2, 2);
var point = new Point(3, 1);
var result = point.DistanceTo(rectangle);
我的代码审查员提到了这个方法 应该 是 point.Distance(rectangle)
。我一直认为这是主观的,也是风格问题。但是,我注意到更多的.NET API设计朝这个方向发展。例如,使用NUnit的Fluent Interface,您可以:
Assert.That(result, Is.EqualTo(1.0));
我也和Linq见过这个:
list.CopyTo(anotherList);
list.IndexOf(item);
list.RemoveAt(0);
.NET和/或第三方API设计人员在方法结束时使用介词是否有任何稳定或一致的方法?或者它只是一种风格问题,而且是主观的? .NET框架中的API设计本身是否随着此策略发展,或者它是否始终存在?
介词很好,只要介词的对象是相应的参数(通常是第一个,而不是 this
扩展方法的论据)。
例如,它可能是晚于第一个的参数:
array.CopyCountedTo(count, destination);
要回答你关于这是否已经与.NET一起发展的问题,不是没有。
函数名中的介词比Microsoft更广泛(例如Java string.charAt
和 string.indexOf
),.NET使用它的时间比LINQ长得多(例如 ArrayList.IndexOf
在.NET 1.0)。
同意,这是主观的,但我的前提是我不想“去定义”来弄清楚方法调用的作用。这个名字不应该扩展成小说,但描述性肯定不会受到伤害。
我个人对此事的看法是介词增强了方法名称的含义。我永远不会在属性名称中使用它们,因为它们几乎总是暗示一个动作或计算。要使用框架提供的示例:
RemoveAt
显然意味着它使用一个位置,而 Remove
很模糊在检查参数之前,您没有发现它的真正含义。
CopyTo
意味着重复和运动,而 Copy
仅仅明显意味着重复。
IndexOf
告诉我们返回值的含义和方法的参数 Index
只提示返回值。
所以是的,总而言之,我认为它是完全合法的 - 并且 - 提高了代码的可读性和直观性。
正如你所说,这是主观的,但我喜欢这样做,Linq使用它的事实让我感到震惊,这是微软的一个默认。