Qual é o nome da 'especificação' de uma função / método?

21

Tenho certeza de que existe um nome especial para a 'especificação' de uma função / método. É uma palavra que se refere a

  • quantos argumentos são necessários
  • a ordem dos argumentos
  • quais argumentos são opcionais

Existe um nome para isso?

callum
fonte
2
Existem alguns tipos diferentes de "especificações". Você menciona o tipo de argumento, ordem e necessidade. Tomados em conjunto com o tipo de retorno, isso é chamado de assinatura de tipo. Você considera o nome da função parte das especificações? Que tal seu espaço para nome, como classe, pacote, módulo etc.? Esta especificação é para programadores ou máquinas? Veja minha resposta.
Kdbanman
4
Estou surpreso que esta pergunta tenha quatro votos próximos - é uma pergunta perfeitamente legítima, IMHO, e bastante responsável (na verdade, ela já foi respondida).
sleske
@ callum, edite sua pergunta para ser menos ambígua, para que ela não seja alterada. Você está preocupado com um idioma específico? Uma especificação de máquina ou uma especificação de programador? Uma especificação para chamada ou uma especificação para implementação?
Kdbanman
1
@kdbanman Eu estava apenas tentando lembrar a palavra "assinatura". Não é ambíguo. Não é específico de idioma. Foi respondido. Está certo.
Callum
@ Callum, foi o que pensei. Obrigado pela resposta.
Kdbanman

Respostas:

47

Geralmente, isso é chamado de assinatura de tipo .

Uma assinatura de tipo inclui o tipo de retorno da função, o número de argumentos, os tipos de argumentos ou erros que ela pode transmitir.

Kilian Foth
fonte
6
Geralmente? Estou acostumado a "protótipo". Que, aparentemente, é a assinatura de tipo mais o nome - en.wikipedia.org/wiki/Function_prototype
ShadSterling
14
@Polyergic, signature é mais geral que prototype (e mais correta neste caso): um prototype declara uma assinatura. Especificamente, "protótipo" implica declaração sem implementação, como em uma declaração de método Java ou C # em uma interfacedeclaração de função C / C ++ ou em um arquivo de cabeçalho (literalmente chamado de prototype).
Kdbanman # 22/15
12
Além disso, arity é um termo menos usado para apenas o número de argumentos.
Sebi
^ Ooh, isso é interessante! Vou ter que lembrar que para quando eu mexo em JS, já que só tenho contagens de argumentos para me guiar, não tipos.
Underscore_d
23

TL; DR Você provavelmente está falando sobre uma assinatura de função (ou assinatura de método), parte da qual é uma assinatura de tipo.

Mas realmente depende do que você considera uma função "spec". Eu interpreto como "todas as informações necessárias para um programador chamar uma função". Isso inclui o nome da função, o tipo de parâmetro, a ordem e a necessidade, provavelmente o tipo de retorno e provavelmente até o espaço para nome dessa função.

Mas se todas essas coisas são necessárias (ou mesmo bem definidas) depende ou não do idioma / ambiente que você está usando. Além disso, se você alterar a definição para "todas as informações necessárias para uma máquina chamar uma função", a especificação provavelmente será diferente 1 .

Estritamente falando, uma assinatura de função (ou método) não é um termo consistente, 2, 3 mesmo no mesmo idioma. 4, 5, 6, 7 Mas é quase certamente a palavra que você está procurando, porque será entendida por quase qualquer programador.


  1. C ++ Spec Draft n337, definição 1.3.17, signature não inclui o tipo de retorno, porque não é necessário resolver a função.

  1. "assinatura" não inclui informações de espaço para nome
  2. "assinatura" inclui exceções e modificadores como public, static, etc.

  1. "Assinaturas" do C ++ não incluem o tipo de retorno
  2. As "assinaturas" do C ++ incluem o tipo de retorno.
  3. As "assinaturas" do C ++ não incluem o tipo de retorno, a menos que a função seja a especialização de um modelo.
  4. As "assinaturas" do C ++ incluem informações sobre o espaço para nome (escopo) e outras coisas "diversas" ...

kdbanman
fonte
Eu incluiria também pelo menos o que o método faz ao falar sobre sua "especificação". Dependendo do foco do dia, posso incluir ou não as informações adicionais necessárias para implementar o método.
um CVn
@ MichaelKjörling, essas são preocupações válidas, mas essas são digressões bastante significativas do que a maioria dos programadores chamaria de "assinatura". O que a função faz deve ser incluído no nome da função, para que seja indiretamente parte da assinatura. Independentemente disso, não acho que o comportamento ou a implementação de funções sejam o que o solicitante pretendia. Vou editar de acordo se ele fez.
Kdbanman
Assinatura sim, "especificação" não. (FWIW, acho que sua resposta é bastante boa e bem citada.)
um CVn
Obrigado pelo feedback. Eu não acho que a resposta seja tão clara como "'spec' no". Depende do que se entende por especificação - certamente poderia-se chegar a uma definição razoável de especificação que inclua o comportamento da função e diretrizes de implementação. Você pode fazer isso em sua própria resposta. Mas, como eu disse, não acho que sejam essas as intenções do autor.
Kdbanman
1
Upvoted porque, embora não language-agnostic, exemplos do C ++ são (A) relevante para mim e (B) ilustrativa da confusão que muitas vezes envolve a terminologia humano
underscore_d
0

Eu acredito que o termo é "contrato". Ele define a interface e o que é esperado do chamador e chamado; no entanto, também abrange coisas como valores permitidos de parâmetros, que não são algo que muitos idiomas permitem ser definidos pela função ou definição de classe; portanto, o termo "contrato" pode ter significado mais amplo do que o que você quis dizer. Eu já vi isso em vários livros de programação orientados a objetos e específicos de Java. Não tenho certeza se é específico de Java, mas não vejo por que precisaria ser. Assinatura é o outro termo comumente usado, mas passei a gostar de "contrato".

Andrew
fonte
Esta é a melhor resposta se a pergunta for realmente o nome da "especificação" da função / método. A assinatura em si não diz nada sobre o que o método realmente faz, permitiu gama de parâmetros, contraints não functionnal e assim por diante ...
ch7kor