Як називається "специфікація" функції / методу?


21

Я впевнений, що існує спеціальна назва для "специфікації" функції / методу. Це слово, на яке посилається

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

Чи є для цього ім’я?


2
Існує кілька різних видів "специфікацій". Ви згадуєте тип, порядок та необхідність аргументу. У сукупності з типом повернення називається підпис типу. Чи вважаєте ви назву функції частиною специфікації? Як щодо простору імен, наприклад класу, пакета, модуля тощо? Це специфікація для програмістів чи машин? Дивіться мою відповідь.
kdbanman

4
Я здивований, що це питання має чотири близьких голоси - це цілком законне питання ІМХО, і цілком відповідне (насправді на нього вже відповіли).
sleske

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

1
@kdbanman Я просто намагався запам’ятати слово «підпис». Це не неоднозначно. Це не залежить від мови. На це відповіли. Нічого страшного.
callum

@callum, ось що я подумав. Дякую за відповідь
kdbanman

Відповіді:


47

Зазвичай це називається підписом типу .

Підпис типу включає тип повернення функції, кількість аргументів, типи аргументів або помилки, які вона може повернути назад.


6
Зазвичай? Я звик до "прототипу". Мабуть, підпис типу плюс ім'я - en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic, підпис є більш загальним, ніж прототип (і в цьому випадку правильніше): прототип оголошує підпис. Зокрема, "прототип" має на увазі декларацію без реалізації, як у декларації методу Java або C # interfaceу файлі заголовка (або в C / C ++) у заголовку (буквально називається а prototype).
kdbanman

12
Крім того, arity - це менш поширений термін для лише кількості аргументів.
Себі

^ О, це цікаво! Мені доведеться це пам’ятати, коли я намагаюся в JS, оскільки у мене є лише аргументи, які керують мене, а не типи.
підкреслюй_

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) ілюстрацією того плутанини, яка так часто оточує людську термінологію,
підкреслюється

0

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


Це найкраща відповідь, якщо питання справді назва "spec" функції / методу. Сам підпис нічого не говорить про те, що насправді робить метод, дозволений діапазон параметрів, нефункціональні протипоказання і так далі ...
ch7kor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.