В информатике , A типа подпись или типа аннотация определяет входы и выходы для функции, подпрограммы или методы . Сигнатура типа включает количество, типы и порядок аргументов, содержащихся в функции. Сигнатура типа обычно используется при разрешении перегрузки для выбора правильного определения вызываемой функции среди множества перегруженных форм.
Примеры [ править ]
C / C ++ [ править ]
В C и C ++ сигнатура типа объявляется так называемым прототипом функции . В C / C ++ объявление функции отражает ее использование ; например, указатель на функцию , который будет вызываться как:
char c ; двойной d ; int retVal = ( * fPtr ) ( c , d );
имеет подпись:
( интервал ) ( символ , двойной );
Эрланг [ править ]
В Erlang сигнатуры типов могут быть необязательно объявлены как:
- спецификации ( function_name ( type1 (), типа2 (), ...) -> out_type ()).
Например:
- spec ( is_even ( number ()) -> boolean ()).
Haskell [ править ]
Сигнатура типа в языке программирования Haskell обычно записывается в следующем формате:
functionName :: arg1Type -> arg2Type -> ... -> argNType
Обратите внимание, что тип результата может рассматриваться как все, что находится за первым предоставленным аргументом. Это следствие каррирования , которое стало возможным благодаря поддержке Haskell функций первого класса ; для этой функции требуются два входа, в которых указан один аргумент, и функция "каррирована" для создания функции для не предоставленного аргумента. Таким образом, вызов where дает новую функцию, которую можно вызвать для создания .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
Эта функция принимает функцию с сигнатурой типа и возвращает данные типа out.a -> a
a
Java [ править ]
В виртуальной машине Java , внутренние сигнатуры типов используются для идентификации методов и классов на уровне кода виртуальной машины.
Пример: метод представлен в байт-коде как . Сигнатура метода выглядит так:String String.substring(int, int)
Ljava/lang/String.substring(II)Ljava/lang/String;
main()
public static void main ( String [] args )
А в дизассемблированном байт-коде он принимает форму Lsome/package/Main/main:([Ljava/lang/String;)V
Сигнатура метода для main()
метода содержит три модификатора:
public
указывает, чтоmain()
метод может быть вызван любым объектом.static
указывает, чтоmain()
метод является методом класса.void
указывает, чтоmain()
метод не имеет возвращаемого значения.
Подпись [ править ]
Тон или стиль этого раздела могут не отражать энциклопедический тон, используемый в Википедии . ( Октябрь 2013 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Сигнатура функции состоит из прототипа функции. Он определяет общую информацию о функции, такую как имя, область действия и параметры. Многие языки программирования используют изменение имен , чтобы передавать больше семантической информации от компиляторов компоновщикам. Помимо искажения, в сигнатуре функции (которая хранится внутри большинства компиляторов) содержится избыток информации, которая недоступна, но может быть доступна. [1]
Понимание понятия сигнатуры функции - важная концепция для всех исследований в области информатики.
- Современные методы объектной ориентации используют интерфейсы , которые по сути являются шаблонами, созданными из сигнатур функций.
- C / C ++ использует перегрузку функций с различными сигнатурами.
Практика множественного наследования требует рассмотрения сигнатур функций, чтобы избежать непредсказуемых результатов.
Теория информатики и, в частности, концепция полиморфизма широко используют концепцию сигнатуры функции.
В языке программирования C подпись примерно эквивалентна определению своего прототипа .
Термин «подпись» может иметь другие значения в информатике. Например:
- Подписи файлов могут идентифицировать или проверять содержимое файла.
- Сигнатуры базы данных могут идентифицировать или проверять схему или версию базы данных.
- В семействе языков программирования ML «подпись» используется как ключевое слово, относящееся к конструкции модульной системы, которая играет роль интерфейса .
Подпись метода [ править ]
В компьютерном программировании , особенно объектно-ориентированном программировании , метод обычно идентифицируется по его уникальной сигнатуре метода , которая обычно включает имя метода, а также количество, типы и порядок его параметров . [2] Сигнатура метода - это наименьший тип метода.
Примеры [ править ]
C / C ++ [ править ]
В C / C ++ сигнатура метода - это имя метода, а также количество и тип его параметров , но возможно иметь последний параметр, который состоит из массива значений:
int printf ( const char * , ... );
Манипулировать этими параметрами можно с помощью подпрограмм в заголовке стандартной библиотеки .<stdarg.h>
C # [ править ]
Подобно синтаксису C, C # видит в качестве сигнатуры метода его имя, а также количество и тип его параметров, где последний параметр может быть массивом значений: [3]
void Add ( out int sum , params int [] value ); [...] Сложить ( из суммы , 3 , 5 , 7 , 11 , - 1 ); // сумма == 25
Java [ править ]
В языке программирования Java сигнатура метода - это имя метода, а также количество, тип и порядок его параметров. Типы возвращаемых данных и созданные исключения не считаются частью сигнатуры метода.
methodName ( параметры ) {...}; перерыв ;
Например, следующие два метода имеют разные сигнатуры:
doSomething ( String [] y ); doSomething ( Строка y );
Следующие три метода имеют одинаковые подписи и считаются одинаковыми, поскольку отличается только возвращаемое значение. Имя параметра не является частью сигнатуры метода и игнорируется компилятором для проверки уникальности метода.
int doSomething ( int y ) String doSomething ( int x ) int doSomething ( int z ) выбрасывает java . lang . Исключение
Юлия [ править ]
В Юлии сигнатуры функций записываются в следующем формате:
комиссия ( сумма :: Int , ставка :: Float64 ) :: Float64
Типы в аргументах используются для множественной отправки . Тип возвращаемого значения проверяется, когда функция возвращает значение, и возникает исключение времени выполнения, если тип значения не соответствует указанному типу.
Абстрактные типы разрешены и приветствуются для реализации общего поведения, общего для всех подтипов. Таким образом, указанная выше функция может быть переписана следующим образом. В этом случае функция может принимать любые подтипы Integer и Real соответственно.
комиссия ( сумма :: целое число , ставка :: реальная ) :: реальная
Типы полностью необязательны в аргументах функции. Когда он не указан, это эквивалентно использованию типа Any, который является супертипом всех типов.
Наконец, идиоматично указывать типы аргументов, но не возвращаемый тип.
Objective-C [ править ]
В языке программирования Objective-C сигнатуры методов для объекта объявляются в файле заголовка интерфейса. Например,
- ( id ) initWithInt: ( int ) значение ;
определяет метод, initWithInt
который возвращает общий объект (an id
) и принимает один целочисленный аргумент. Objective-C требует, чтобы тип в сигнатуре был явным, в то время как тип не является явным id
; эта подпись эквивалентна:
- initWithInt: ( int ) значение ;
Ржавчина [ править ]
В Rust сигнатуры функций записываются в следующем формате:
fn комиссия ( сумма : u32 , ставка : f64 ) -> f64 ;
Ссылки [ править ]
- ^ «Справочник по C ++: термины программирования» . Проверено 3 декабря 2013 года .
- ^ Пол Лихи. «Подпись метода» . http://www.about.com/ : Руководство About.com . Проверено 31 мая 2011 .
Подпись метода является частью объявления метода.
Это комбинация имени метода и списка параметров.
- ^ Mössenböck, Hanspeter (2002-03-25). «Расширенный C #: переменное количество параметров» (PDF) . http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/ : Institut für Systemsoftware, Университет Йоханнеса Кеплера в Линце, Fachbereich Informatik. п. 52 . Проверено 3 августа 2011 .