关于英语语言的问题:在标识符名称的第一部分使用复数形式

5
作为非英语母语者,我经常会想到在命名类或对象的名字时,在名词短语的开头使用复数形式是否合适。
例如:
如果我有一个接口连接多个[流媒体]播放器,用PlayersInterface来命名它是好的英语表达,而不是用PlayerInterface,因为后者只是针对一个播放器的接口?
如果有一个处理事件的服务,用EventsService来命名它是否可以?或者EventService听起来更好?
谢谢你的帮助!
编辑:
显然在.NET中,接口名称以I开头。所以我们稍微改变一下例子,称其为PlayersGateway
我真的没有另一个名为PlayerInterface(或PlayerGateway)的类。这只是一个替代名称的示例,如果我只需要一个播放器的接口,我会使用它。我认为在同一个项目中同时使用PlayerGatewayPlayersGateway很难维护,不说对未来的团队成员不友好。所以请假设没有PlayerGateway,只有PlayersGateway

EventService 的用例在我看来很简单明了 - 两种形式都是语法上正确的,这取决于你的命名约定。我想知道的是:WidgetsList 还是 WidgetList? - tillda
2
不是C#方面的专家,但应该是IPlayerIPlayers吧?个人认为这样听起来更好。 - user395760
3
我认为如果仅将WidgetList用于List<Widget>,那么生活会更加轻松,WidgetsList可以用于List<List<Widget>>。对于原始问题的回答,您可以选择一个类似“MultiPlayerInterface”的名称。 - Jimmy
我从未见过复数形式像WidgetsList这样使用,尽管这应该被认为是正确的名称。让我们面对现实,没有人会创建EventService来处理一个(或一种)事件,所以它真的应该是EventsService - 只是它从来没有这样做。 - Rich
4个回答

8

据我了解,通常应该使用单数形式的词语。例如,如果你有一个名为Car的类,而你又有一个包含多个Car类实例的类,你应该称其为CarCollection而不是Cars。


3
我同意,不过我想补充一点,如果你有一组它们,比如List<Car>,把这个变量称为“cars”是可以的。 - Grant Crofton
如果你不把自己搞糊涂的话,那么“true”就是正确的。我曾经遇到过变量/集合的问题,其中唯一的命名区别只有一个字符。 - Brent

6

在英语中,当你把一个名词放在另一个名词旁边来修饰它时,通常使用单数:

 Coat Room
 Guard Tower

即使房间里有几层涂料或者塔楼里有守卫,也不能保证安全。在我看来,变量命名应该遵循语言的一般规则。


1

我倾向于使用单数形式。EventHandler或EventService会暗示它将一个接一个地处理事件。对于视频播放器,如果你说你正在连接多个播放器并几乎同时控制它们,我可能会被说服。

你会为单数情况有第二种类型/变量吗?

PlayersInterface AllPlayers = new PlayersInterface();
PlayerInterface MyPlayer0 = AllPlayers.getPlayer(0);
PlayerInterface MyPlayer2 = AllPlayers.getPlayer(1);

即便如此,我仍然认为这两个类型名称太相似了。

但是,这只是个人喜好。


谢谢你,@Tom,但这不完全是我想要的,我觉得我没有表达清楚我的问题。我编辑了问题以澄清我的意思。 - Ilya Kogan

1

在数据库中,对于类名和表名,单数形式常常在语义上更合理,因为每个实例(或数据库中的行)都是一个单独的实体。

您也可以将同样的推理应用于数组。您可以选择将parcel [4]视为第4个包裹而不是一堆包裹中的第4个。

我认为EventService和PlayerInterface是更好的名称,听起来更符合英语语音习惯。


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