函数/方法的“规范”的名称是什么?


21

我很确定函数/方法的“规范”有一个特殊的名称。这个词指的是

  • 需要多少个论点
  • 参数顺序
  • 哪些参数是可选的

有这个名字吗?


2
有几种不同的“规范”。您提到了参数类型,顺序和必要性。与返回类型一起,称为类型签名。您是否认为规范的功能部分名称?它的名称空间如何,例如类,包,模块等?该规范适用于程序员或机器吗?看我的答案。
kdbanman

4
令我惊讶的是,这个问题获得了四票赞成-这是一个完全合法的问题,恕我直言,而且很容易回答(事实上,它已经得到了回答)。
sleske 2015年

@callum,请修改您的问题,使其模棱两可,以便将其取消标记。您是否在关注特定语言?机器规格还是程序员规格?调用规范或实现规范?
kdbanman 2015年

1
@kdbanman我只是想记住“签名”一词。这不是模棱两可的。它不是特定于语言的。已经回答了。没关系。
callum 2015年

@callum,这就是我的想法。感谢您的答复。
kdbanman

Answers:


47

通常,这称为类型签名

类型签名包括函数的返回类型,参数数量,参数类型或它可能传回的错误。


6
通常吗 我习惯于“原型”。这显然是类型签名加名字- en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic,签名比原型更通用(在这种情况下更正确):原型声明了签名。具体来说,“原型”意味着无需执行的声明,例如,中的Java或C#方法声明interface或头文件中的C / C ++函数声明(直称为prototype)。
kdbanman

12
同样,仅在参数数量上,arity是不太常用的术语。
塞比2015年

^哦,那很有趣!我必须记住这一点,因为当我涉足JS时,因为我只有参数计数来指导我,而不是类型。
underscore_d

23

TL; DR您可能正在谈论函数签名(或方法签名),其中一部分是类型签名。

但实际上取决于您认为函数的“规格”。我将其解释为“程序员调用函数所需的所有信息”。这包括函数名称,参数类型,顺序和必要性,可能是返回类型,甚至可能是该函数的名称空间。

但是,是否需要(甚至定义明确)所有这些条件取决于您使用的语言/环境。另外,如果将定义更改为“ 机器调用函数所需的所有信息”,则规范可能会有所不同1

严格来说,函数(或方法)签名不是一致的术语,即使在相同的语言中也是如此2、34,5,6,7 但这几乎可以肯定是您要查找的词,因为几乎所有程序员都会理解它。


  1. C ++ Spec Draft n337,定义1.3.17,签名不包括返回类型,因为没有必要解析该函数​​。

  1. “签名”不包含名称空间信息
  2. “签名”包括异常和改性剂一样publicstatic

  1. C ++“签名”不包含返回类型
  2. C ++“签名” 确实包含返回类型。
  3. C ++“签名”不包含返回类型,除非函数是模板的特殊化。
  4. C ++“签名”包括名称空间(作用域)信息和“其他杂项” ...


我还将至少包括该方法在谈论其“规格”时的作用。根据一天的重点,我可能会也可能不会包括实施该方法所需的任何其他信息。
CVn 2015年

@MichaelKjörling,这些是合理的关注点,但是与大多数程序员称之为“签名”的东西相比,这些偏离很大。函数的功能应包含在函数名称中,因此它间接地是签名的一部分。无论如何,我认为函数行为或实现不是要求者想要的。如果事实证明我会做相应的编辑。
kdbanman

签名是,“规格”否。(FWIW,我认为您的回答很好,而且引人注目。)
CVn 2015年

感谢您的反馈。我认为答案不是“'spec'no”那么明确。这取决于规范的含义-当然可以提出一个合理的规范定义,其中包括函数行为和实现准则。欢迎您自己回答。但是,就像我说的那样,我认为这些不是提问者想要的。
kdbanman

1
提出反对意见的原因是,尽管并非如此language-agnostic,但C ++示例与(A)与我有关,并且(B)说明了人类术语经常引起的混乱
underscore_d

0

我相信该术语是“合同”。它定义了接口以及呼叫者和被呼叫者的期望;但是,它也涵盖了诸如参数的允许值之类的东西,而函数或类定义并没有定义许多语言,因此“合同”一词的含义可能比您的意思更广泛。我已经在几本面向对象和Java特定的编程书中看到了它。我不确定它是否特定于Java,但我不知道为什么要这么做。签名是另一个常用术语,但我逐渐喜欢“合同”。


如果问题确实是函数/方法的“规范”的名称,则这是最佳答案。签名本身并不能说明方法的实际作用,允许的参数范围,非功能
约束
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.