Jak nazywa się „spec” funkcji / metody?

21

Jestem prawie pewien, że istnieje specjalna nazwa dla „specyfikacji” funkcji / metody. To słowo odnosi się do

  • ile potrzeba argumentów
  • kolejność argumentów
  • które argumenty są opcjonalne

Czy jest na to jakaś nazwa?

kalus
źródło
2
Istnieje kilka różnych rodzajów „specyfikacji”. Wspominasz o rodzaju argumentu, porządku i konieczności. W połączeniu z typem zwracanym jest to tak zwana sygnatura typu. Czy uważasz nazwę funkcji za część specyfikacji? Co powiesz na przestrzeń nazw, taką jak klasa, pakiet, moduł itp.? Czy jest to specyfikacja dla programistów lub maszyn? Zobacz moją odpowiedź.
kdbanman
4
Jestem zaskoczony, że to pytanie ma cztery bliskie głosy - jest to całkowicie uzasadnione pytanie IMHO i dość odpowiedzialne (w rzeczywistości już na nie odpowiedziano).
sleske
@callum, edytuj swoje pytanie, aby było mniej dwuznaczne, aby można je było usunąć. Czy interesuje Cię konkretny język? Specyfikacja maszyny czy specyfikacja programisty? Specyfikacja wywołania czy specyfikacja implementacji?
kdbanman
1
@kdbanman Właśnie próbowałem zapamiętać słowo „podpis”. To nie jest dwuznaczne. To nie jest specyficzne dla języka. Odpowiedź została udzielona. W porządku.
callum
@callum, tak myślałem. Dziękuję za odpowiedź.
kdbanman

Odpowiedzi:

47

Zwykle jest to nazywane podpisem typu .

Podpis typu zawiera typ zwracany przez funkcję, liczbę argumentów, typy argumentów lub błędy, które może przekazać.

Kilian Foth
źródło
6
Zwykle? Jestem przyzwyczajony do „prototypowania”. Który najwyraźniej jest podpisem typu i nazwą - en.wikipedia.org/wiki/Function_prototype
ShadSterling
14
@Polyergic, podpis jest bardziej ogólny niż prototyp (i w tym przypadku bardziej poprawny): prototyp deklaruje podpis. W szczególności „prototyp” oznacza deklarację bez implementacji, jak w deklaracji metody Java lub C # w deklaracji funkcji interfacelub C / C ++ w pliku nagłówkowym (dosłownie nazywanym a prototype).
kdbanman
12
Również arity jest rzadziej używanym terminem na samą liczbę argumentów.
Sebi
^ O, to ciekawe! Będę musiał pamiętać o tym, kiedy zajmuję się JS, ponieważ mam tylko argumenty, które mnie poprowadzą, a nie typy.
underscore_d
23

TL; DR Prawdopodobnie mówisz o podpisie funkcji (lub podpisie metody), którego częścią jest podpis typu.

Ale tak naprawdę zależy od tego, co uważasz za funkcję „spec”. Interpretuję to jako „wszystkie informacje wymagane przez programistę do wywołania funkcji”. Obejmuje to nazwę funkcji, typ parametru, kolejność i konieczność, prawdopodobnie typ zwracany, a prawdopodobnie nawet przestrzeń nazw tej funkcji.

Ale to, czy wszystkie te rzeczy są wymagane (czy nawet dobrze zdefiniowane), zależy od używanego języka / środowiska. Ponadto, jeśli zmienisz definicję na „wszystkie informacje wymagane przez maszynę do wywołania funkcji”, specyfikacja prawdopodobnie będzie inna 1 .

Ściśle mówiąc, podpis funkcji (lub metody) nie jest spójnym terminem 2, 3 nawet w tym samym języku. 4, 5, 6, 7 Ale prawie na pewno jest to słowo, którego szukasz, ponieważ zrozumie je prawie każdy programista.


  1. C ++ Spec Draft n337, definicja 1.3.17, podpis nie zawiera typu zwracanego, ponieważ nie jest konieczne rozwiązanie tej funkcji.

  1. „podpis” nie zawiera informacji o przestrzeni nazw
  2. „podpis” zawiera wyjątki i jak modyfikatory public, staticitd

  1. „Podpisy” w C ++ nie zawierają typu zwrotu
  2. C ++ „podpisy” zrobić to typ zwracany.
  3. „Podpisy” w C ++ nie zawierają typu zwracanego, chyba że funkcja jest specjalizacją szablonu.
  4. „Podpisy” w C ++ obejmują informacje o przestrzeni nazw (zakres) i inne „inne” rzeczy ...

kdbanman
źródło
Chciałbym również uwzględnić przynajmniej to, co robi metoda, mówiąc o jej „specyfikacji”. W zależności od celu dnia mogę, ale nie musi, zawierać dodatkowych informacji niezbędnych do wdrożenia metody.
CVn
@ MichaelKjörling, są to ważne obawy, ale są to dość znaczące dygresje w stosunku do tego, co większość programistów nazwałaby „podpisem”. To, co robi funkcja, powinno być zawarte w nazwie funkcji, więc jest to pośrednio część podpisu. Niezależnie od tego nie sądzę, aby zachowanie funkcji lub implementacja były zgodne z zamierzeniami pytającego. Zmienię odpowiednio, jeśli okaże się, że to zrobił.
kdbanman
Podpis tak, „spec” nie. (FWIW, myślę, że twoja odpowiedź jest całkiem dobra i dobrze cytowana.)
CVn
Dzięki za opinie. Nie wydaje mi się, żeby odpowiedź była tak jednoznaczna, jak „„ spec ”nie. Zależy to od tego, co należy rozumieć przez specyfikację - z pewnością można wymyślić rozsądną definicję specyfikacji, która obejmuje zachowanie funkcji i wytyczne dotyczące implementacji. Możesz to zrobić we własnej odpowiedzi. Ale tak jak powiedziałem, nie sądzę, że takie były zamierzenia pytającego.
kdbanman
1
Pozytywnie oceniany, ponieważ chociaż nie language-agnostic, przykłady C ++ są dla mnie (A) istotne i (B) ilustrują zamieszanie, które tak często otacza ludzką terminologię
podkreślenie_d
0

Uważam, że terminem tym jest „umowa”. Definiuje interfejs i czego oczekuje się od dzwoniącego i odbierającego; jednak obejmuje również takie wartości, jak dopuszczalne wartości parametrów, które nie są czymś, co wiele języków pozwala na zdefiniowanie przez funkcję lub definicję klasy, więc termin „kontrakt” może być szerszy niż to, co miałeś na myśli. Widziałem to w kilku książkach programistycznych i specyficznych dla Java. Nie jestem pewien, czy jest to specyficzne dla Javy, ale nie rozumiem, dlaczego miałoby tak być. Podpis jest drugim powszechnie używanym terminem, ale polubiłem „kontrakt”.

Andrzej
źródło
To najlepsza odpowiedź, jeśli pytanie jest tak naprawdę nazwą „spec” funkcji / metody. Sam podpis nic nie mówi o tym, co faktycznie robi metoda, dopuszczalny zakres parametrów, niefunkcjonalne przeciwności i tak dalej ...
ch7kor