Jump to content

Введите подпись

(Перенаправлено из аннотации типа )

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

В C и C++ сигнатура типа объявляется с помощью так называемого прототипа функции . В C/C++ объявление функции отражает ее использование ; например, указатель на функцию с сигнатурой (int)(char, double) будет называться:

char c;
double d;
int retVal = (*fPtr)(c, d);

В Erlang сигнатуры типов могут быть объявлены опционально, например: [1]

-spec function_name(type1(), type2(), ...) -> out_type().

Например:

-spec is_even(number()) -> boolean().

Сигнатура типа в Haskell обычно имеет следующую форму:

functionName :: arg1Type -> arg2Type -> ... -> argNType

Обратите внимание, что типом результата можно считать все, что находится за пределами первого предоставленного аргумента. Это следствие каррирования , которое стало возможным благодаря поддержке Haskell первоклассных функций ; эта функция требует двух входных данных, где предоставляется один аргумент, и функция «каррируется», чтобы создать функцию для не предоставленного аргумента. Таким образом, вызов f x, где f :: a -> b -> c, дает новую функцию f2 :: b -> c это можно назвать f2 b производить c.

Спецификации фактического типа могут состоять из фактического типа, например Integerили переменная общего типа , которая используется в параметрических полиморфных функциях , таких как a, или b, или anyType. Итак, мы можем написать что-то вроде: functionName :: a -> a -> ... -> a

Поскольку Haskell поддерживает функции высшего порядка , функции можно передавать в качестве аргументов. Это написано как: functionName :: (a -> a) -> a

Эта функция принимает функцию с сигнатурой типа a -> a и возвращает данные типа a вне.

В виртуальной машине Java внутренние сигнатуры типов используются для идентификации методов и классов на уровне кода виртуальной машины.

Пример: метод String String.substring(int, int) представлено в байт-коде как Ljava/lang/String.substring(II)Ljava/lang/String;.

Подпись main метод выглядит следующим образом: [2]

public static void main(String[] args);

А в дизассемблированном байт-коде он принимает вид Lsome/package/Main/main:([Ljava/lang/String;)V

Сигнатура метода для main() метод содержит три модификатора:

  • public указывает на то, что main() метод может быть вызван любым объектом.
  • static указывает на то, что main() метод является методом класса.
  • void указывает на то, что main() метод не имеет возвращаемого значения.

Сигнатура функции состоит из прототипа функции. Он определяет общую информацию о функции, такую ​​как имя, область действия и параметры. Многие языки программирования используют искажение имен , чтобы передать больше семантической информации от компиляторов компоновщикам. Помимо искажений, в сигнатуре функции (хранящейся внутри большинства компиляторов) содержится избыток информации, которая недоступна, но к ней можно получить доступ. [3]

Понимание понятия сигнатуры функции является важной концепцией для всех исследований в области информатики.

  • Современные методы объектной ориентации используют интерфейсы , которые по сути представляют собой шаблоны, созданные на основе сигнатур функций.
  • В C++ используется перегрузка функций с различными сигнатурами.

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

В языке программирования C сигнатура примерно эквивалентна определению ее прототипа .

В ML семействе языков программирования «подпись» используется как ключевое слово, относящееся к конструкции модульной системы, играющей роль интерфейса .

Сигнатура метода

[ редактировать ]

В компьютерном программировании , особенно в объектно-ориентированном программировании , метод обычно идентифицируется по его уникальной сигнатуре метода , которая обычно включает имя метода, а также количество, типы и порядок его параметров . [4] Сигнатура метода — это наименьший тип метода.

В C/C++ сигнатурой метода является имя метода, а также количество и тип его параметров, но можно иметь последний параметр, состоящий из массива значений:

int printf(const char*, ... );

Манипулировать этими параметрами можно с помощью процедур в заголовке стандартной библиотеки. <stdarg.h>.

В C++ тип возвращаемого значения также может следовать за списком параметров, который называется конечным типом возвращаемого значения . Разница только синтаксическая; в любом случае результирующая подпись идентична:

auto printf(const char*... ) -> int;

Подобно синтаксису C, сигнатуры методов в C# состоят из имени, количества и типа его параметров, где последний параметр может быть массивом значений: [5]

void Add(out int sum, params int[] value);
[...]
Add(out sum, 3, 5, 7, 11, -1);  // sum == 25

В Java сигнатура метода состоит из имени, количества, типа и порядка его параметров. Типы возвращаемых значений и выданные исключения не считаются частью сигнатуры метода, равно как и имена параметров; они игнорируются компилятором для проверки уникальности метода.

Сигнатуры методов помогают различать перегруженные методы (методы с одинаковыми именами) в классе. Типы возвращаемых значений не включаются в перегрузку. Для различения перегруженных методов следует использовать только сигнатуры методов. [6]

Например, следующие два метода имеют разные сигнатуры:

void doSomething(String[] x); // doSomething(String[])
void doSomething(String x);   // doSomething(String)

Следующие два метода имеют одинаковую сигнатуру:

int doSomething(int x);                   // doSomething(int)
void doSomething(int y) throws Exception; // doSomething(int)

В Julia сигнатуры функций принимают следующий вид:

commission(sale::Int, rate::Float64)::Float64

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

Абстрактные типы разрешены и поощряются для реализации общего поведения, общего для всех подтипов. Таким образом, приведенную выше функцию можно переписать следующим образом. В этом случае функция может принимать любые подтипы Integer и Real соответственно.

commission(sale::Integer, rate::Real)::Real

Типы в аргументах функции совершенно необязательны. Если он не указан, это эквивалентно использованию типа Any, который является супертипом всех типов. Идиоматично указывать типы аргументов, но не тип возвращаемого значения.

В языке программирования Objective-C сигнатуры методов объекта объявляются в файле заголовка интерфейса. Например,

- (id)initWithInt:(int)value;

определяет метод initWithInt который возвращает общий объект ( id) и принимает один целочисленный аргумент. Objective-C требует, чтобы тип в сигнатуре был явным, только если тип не указан. id; эта подпись эквивалентна:

- initWithInt:(int)value;

Ржавчина

[ редактировать ]

В Rust сигнатуры функций имеют следующий вид:

fn commission(sale: u32, rate: f64) -> f64;

См. также

[ редактировать ]
  1. ^ «Справочное руководство пользователя Erlang, версия 13.1.4» . erlang.org . 7.5 Характеристики функций. Архивировано из оригинала 27 января 2023 г. Проверено 27 апреля 2023 г.
  2. ^ «Сигнатура (функции) — Глоссарий MDN Web Docs: Определения терминов, связанных с Интернетом | MDN» . http://developer.mozilla.org . 08.06.2023 . Проверено 5 июля 2024 г.
  3. ^ «Справочник по C++: Термины программирования» . Проверено 3 декабря 2013 г.
  4. ^ Пол Лихи. «Сигнатура метода» . Руководство About.com . Проверено 31 мая 2011 г. Сигнатура метода является частью объявления метода. Это комбинация имени метода и списка параметров.
  5. ^ Мессенбёк, Ханспетер (25 марта 2002 г.). «Расширенный C#: переменное количество параметров» (PDF) . Институт системного программного обеспечения, Университет Иоганна Кеплера в Линце, факультет компьютерных наук. п. 52 . Проверено 3 августа 2011 г.
  6. ^ «Глава 4. Формат файла класса» . docs.oracle.com . Проверено 17 октября 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 601cd9891533e24de0e143ed3aff9439__1720172580
URL1:https://arc.ask3.ru/arc/aa/60/39/601cd9891533e24de0e143ed3aff9439.html
Заголовок, (Title) документа по адресу, URL1:
Type signature - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)