谓词函数和谓词函数对象
我这周要矮一些。 部分原因是因为在决定报废之前,我正在阅读一篇文章。 部分原因是因为本周我写了一些星期三的摘要。 最后,这是因为我认为我无法将这篇文章扩展得那么大。 :)
命名功能
通常,人们被告知将方法和功能命名为动词。 如果它不是动词,则它是一个名词,因此是一个宾语(假设它是一种面向对象的语言)。 在大多数情况下,这是正确的,并且,如果您不确定是使用简单的动词形式还是我将要提及的形式,则应使用动词形式以确保安全。
过去时动词/形容词形式
使我成为这种命名约定的原因是Python的reversed
函数。 您可能会说它已经是一个动词,但是我有两句话要说:
- 通常,以动词形式命名您的函数时,它们是“命令”形式。 (即run , filter和print )。 他们不是过去时。
- 这实际上不是动词。 这个词通常被用作过去时动词,被用作形容词。 这是英文。 在这里一切皆有可能:)
如果它可以帮助您将其视为过去时动词形式而不是形容词,那很好,因为它实际上仅适用于无论如何都用作过去时动词的形容词(到目前为止,我已经发现了)。
何时使用此表格
用于命名函数和方法的形容词形式并不打算经常使用。 它有特定的用途。 对于函数和方法来说,它意味着接受一个对象( this
相当于为方法接受一个对象)或多个相同类型的对象,并返回一个相同类型的新对象(或者可能是相似的对象,例如子类)。
例如,Python中的reversed
函数采用一个序列,并以反向顺序返回迭代器。 另一个例子是Python的sorted
。 有关方法的示例,您可以查看我的Weighted
类上的combinedWith
。 Weighted
持有一个对象和一个整数(或权重),并且当两个Weighted
对象包含同一个对象并存在于同一“位置”时,该对象的重复项就没有意义(即,同一张脸的两个具有不同的权重)在我的骰子滚子库中死亡,其中权重表示在骰子上有多少张面Kong。) combinedWith
方法接收两个Weighted
对象( this
对象以及传入的任何对象),并返回一个新的Weighted
对象,该对象由前两个对象的权重等于前两个对象的权重之和。
它返回一个新对象的事实是一种关键。 如果Weighted
类仅将对象转换到适当位置,则该函数应命名为combineWith
。 当寻找object1.combinedWith(object2)
它是描述运行方法,但是阅读的结果短语object1.combineWith(object2)
给人的印象是告诉object1
将自身与结合object2
。 第一个作为对object1
的就地更新没有任何意义。 如果它是函数而不是方法,那么我将使用combined(object1, object2)
。 combine
工作还可以,但IMO却不尽人意。
奥托罗
就是这样 但是请记住,这几乎适用于所有语言。 Weighted
类实际上是Java类-尽管我正在编写该库的Python版本,同时有机会尝试配对编程并教我的兄弟Python。
我最终的写作超出了我的预期,但是仍然比平时少。
翻译自: https://www.javacodegeeks.com/2015/05/functions-named-as-adjectives.html
谓词函数和谓词函数对象