Как называется «спецификация» функции / метода?


21

Я почти уверен, что есть специальное имя для «спецификации» функции / метода. Это слово относится к

  • сколько аргументов нужно
  • порядок аргументов
  • какие аргументы являются необязательными

Есть ли название для этого?


2
Есть несколько разных видов «спекуляций». Вы упоминаете тип аргумента, порядок и необходимость. Взятые вместе с возвращаемым типом, это называется сигнатурой типа. Считаете ли вы название функции частью спецификации? Как насчет пространства имён, такого как класс, пакет, модуль и т. Д.? Это спецификация для программистов или машин? Смотри мой ответ.
— kdbanman

4
Я удивлен, что у этого вопроса есть четыре близких голоса - это ИМХО совершенно законный вопрос, и вполне ответственный (фактически, на него уже ответили).
— Слёске

@callum, пожалуйста, отредактируйте свой вопрос, чтобы он был менее двусмысленным, чтобы его можно было не помешать. Вас интересует конкретный язык? Спецификация машины или спецификация программиста? Спецификация для вызова или спецификация для реализации?
— kdbanman

1
@kdbanman Я просто пытался вспомнить слово «подпись». Это не двусмысленно. Это не зависит от языка. Это было дано ответ. Все нормально.
— Каллум

@callum, я так и думал. Спасибо за ответ.
— kdbanman

Ответы:


47

Обычно это называется сигнатурой типа .

Сигнатура типа включает тип возвращаемого значения функции, количество аргументов, типы аргументов или ошибки, которые она может передать обратно.


6
Обычно? Я привык к «прототипу». По-видимому, это сигнатура типа плюс имя - en.wikipedia.org/wiki/Function_prototype
— ShadSterling,

14
@Polyergic, подпись является более общей, чем прототип (и в этом случае более правильной): прототип объявляет подпись. В частности, «прототип» подразумевает объявление без реализации, как в объявлении метода Java или C # в объявлении interface, или объявление функции C / C ++ в заголовочном файле (буквально называемый a prototype).
— kdbanman

12
Кроме того, arity является менее часто используемым термином только для количества аргументов.
— Себи

^ О, это интересно! Я должен помнить об этом, когда я балуюсь JS, так как у меня есть только количество аргументов, а не типы.
— underscore_d

23

TL; DR Вы, вероятно, говорите о сигнатуре функции (или сигнатуре метода), частью которой является сигнатура типа.

Но на самом деле все зависит от того, что вы считаете функцией «спец». Я интерпретирую это как «всю информацию, необходимую программисту для вызова функции». Это включает имя функции, тип параметра, порядок и необходимость, возможно, тип возвращаемого значения и, возможно, даже пространство имен этой функции.

Но то, требуются ли все эти вещи (или даже четко определены), зависит от языка / среды, которую вы используете. Кроме того, если вы измените определение на «всю информацию, необходимую для того, чтобы машина вызывала функцию», спецификация, скорее всего, будет другой 1 .

Строго говоря, сигнатура функции (или метода) не является единообразным термином, 2, 3 даже на одном языке. 4, 5, 6, 7 Но это почти наверняка слово, которое вы ищете, потому что оно будет понято почти любым программистом.


  1. C ++ Spec Draft n337, определение 1.3.17, подпись не включает тип возвращаемого значения, поскольку нет необходимости разрешать функцию.

  1. «подпись» не включает информацию о пространстве имен
  2. «подпись» включает в себя исключения и модификаторы, как public, staticи т. д.

  1. C ++ «подписи» не включают тип возвращаемого значения
  2. C ++ «подпись» делать включает тип возврата.
  3. Сигнатуры C ++ не включают возвращаемый тип, если только функция не является специализацией шаблона.
  4. «Сигнатуры» C ++ включают информацию о пространстве имен (области) и «прочее» ...


Я бы также включил хотя бы то, что делает метод, когда говорит о его «спецификации». В зависимости от фокуса дня я могу включить или не включить любую дополнительную информацию, необходимую для реализации метода.
— CVn

@ MichaelKjörling, это действительные проблемы, но это довольно существенные отклонения от того, что большинство программистов назвали бы «подписью». То, что делает функция, должно быть включено в имя функции, поэтому она косвенно является частью сигнатуры. Несмотря на это, я не думаю, что намерение или реализация функции - это то, что задумал спрашивающий. Я отредактирую соответственно, если окажется, что он сделал.
— kdbanman

Подпись да, «спец» нет. (FWIW, я думаю, что ваш ответ довольно хорош и процитирован.)
— CVn

Спасибо за ответ. Я не думаю, что ответ такой четкий, как «спец» нет. Это зависит от того, что подразумевается под спецификацией - конечно, можно придумать разумное определение спецификации, которое включает поведение функций и рекомендации по реализации. Вы можете сделать это в своем собственном ответе. Но, как я уже сказал, я не думаю, что это то, что задумал аскер.
— kdbanman

1
Утверждено, потому что, хотя нет language-agnostic, примеры C ++ (A) относятся ко мне и (B) иллюстрируют путаницу, которая так часто окружает человеческую терминологию
— underscore_d

0

Я считаю, что термин "контракт". Он определяет интерфейс и то, что ожидается от абонента и вызываемого абонента; однако он также охватывает такие вещи, как допустимые значения параметров, что не так, как многие языки позволяют определять с помощью определения функции или класса, поэтому термин «контракт» может иметь более широкий смысл, чем вы имели в виду. Я видел это в нескольких объектно-ориентированных и специфических для Java книгах по программированию. Я не уверен, что это специфично для Java, но я не понимаю, зачем это нужно. Подпись - это другой часто используемый термин, но мне стало нравиться «контракт».


Это лучший ответ, если вопрос на самом деле является названием для «спецификации» функции / метода. Сама подпись ничего не говорит о том, что на самом деле делает метод, допустимом диапазоне параметров, нефункциональных
— ограничениях
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.