以惯用的方式命名布尔谓词函数

时间:2014-01-05 14:56:23

标签: go

让我们假设您正在使用一个函数来返回一个bool,告知用户上个月是否处于活动状态。

在Ruby中:

def active_in_last_month?;end

在C#中

public bool WasActiveInLastMonth(){}

在Go中命名布尔谓词函数的惯用方法是什么?

2 个答案:

答案 0 :(得分:1)

<强> TL;博士

func wasActiveInLastMonth() bool

完整答案

我查看了一些着名的开源项目的GitHub存储库,选择了一个半随机文件,并找到了以下内容:

Etcd lease / lessor.go

func (le *lessor) isPrimary() bool

Kubernetes service / service_controller.go

func (s *ServiceController) needsUpdate(oldService *v1.Service, newService *v1.Service) bool

func portsEqualForLB(x, y *v1.Service) bool

func portSlicesEqualForLB(x, y []*v1.ServicePort) bool

Consul agent / acl.go

func (m *aclManager) isDisabled() bool

Docker Moby(Docker上游的开源)cli / cobra.go

func hasSubCommands(cmd *cobra.Command) bool

func hasManagementSubCommands(cmd *cobra.Command) bool

我想说这四个项目代表了一些现存最好的评论和着名的代码。似乎is / has模式非常普遍,尽管不是唯一的模式。如果你选择这种模式,你肯定能够捍卫你的选择作为事实上的习语。

答案 1 :(得分:0)

Donovan和Kernighan的“Go编程语言”在第6章中建议

  

仅访问或修改类型内部值的函数称为getter和setter。但是,在命名getter方法时,我们通常会省略Get前缀。此简称首选项不仅适用于所有方法,还适用于其他还原剂前缀,例如Fetch,Find和Lookup

根据这个建议,我会将函数命名为“LastMonth”或“lastMonth”,如果它是私有的,则跳过前缀