Что такое сигнатура функции? Signature (сигнатура) — это что?

Как известно, интерфейс прикладного программирования, именуемый API, включает в себя библиотеки функций и классов с описанием семантики и сигнатуры (signature) . В данной статье мы поговорим, что же такое сигнатура и для чего она нужна. Об этом написано уже много слов, но мы уверены, что чтение нашего текста тоже не будет для вас бесполезным.
Сигнатура — это часть общего объявления функции, которая позволяет средствам трансляции выполнять идентификацию этой самой функции среди других. В разных языках программирования есть различные представление о сигнатуре (signature).
Сигнатура (signature): какая она бывает?
Существует как сигнатура реализации, так и сигнатура вызова (обычно эти понятия различают).
Signature вызова в большинстве случаев формируется из синтаксической конструкции вызова функции, при этом учитывается сигнатура области её видимости, а также имя функции и последовательность фактических типов аргументов в самом вызове и в типе результата.
Если говорить о сигнатурах (signatures) реализации, то здесь участвуют следующие элементы, входящие в синтаксическую конструкцию объявления функции: — имя; — последовательность формальных типов аргументов; — спецификатор области видимости функции.
Signature в разных языках программирования
В языке программирования С++ простая функция распознаётся компилятором по последовательности типов её аргументов и её имени, что и составляет в данном языке сигнатуру или сигнату функции. И если функция — это метод некоторого класса, то в Signature участвует и имя класса.
Если говорить о языке программирования Java, то тут сигнатура метода составляется из его имени и последовательности типа параметров. То есть тип значение в signature не участвует.
Однако давайте подробнее остановимся на том, зачем нужна сигнатура в JavaScript.
Signature в JavaScript: особенности применения signature
Когда программист на Javascript овладевает самыми глубокими секретами функционального программирования, он всё чаще встречает стрелки с типом, которые написаны над функциями. Первая мысль: «Что такое? Я же мастер по динамически типизированному Javascript, который свободен от ограничений типов».
На самом деле, всё просто, а такие записи не что иное, как сигнатура типов. С помощью signature можно рассказать о функции, причём сама по себе сигнатура значит в функциональном программировании гораздо больше, чем можно подумать.
Почему Signature полезна в коде?
Signature определяет возвращаемые и входящие типы для функции, включая иногда типы, число и порядок аргументов, которые содержатся в функции. Таким образом, signature используется для отслеживания работы функции.
Сигнатура типов основана на системе Хиндли-Милнера. Если вы обнаружите функцию, которая задокументирована Signature и будете уметь понимать её, это даст вам самое наглядное представление о работе данной функции.
Signature и простые функции
Смотрим пример использования signature:
// length :: String → Number const length = s => s.length;В вышеуказанном примере функция принимает строку, возвращая число. И если мы посмотрим на этот участок кода с signature внимательнее, то увидим следующее: 1. Вначале записывается имя функции, потом :: . 2. Далее перед стрелкой signature записывается входящий тип. 3. После этого возвращаемый тип записывается после стрелки signature либо в самом конце.
Собственно говоря, вполне нормально, когда функция имеет множественные signatures, пока это удобно. Но если она становится чересчур гибкой, следует использовать произвольные переменные Хиндли-Милнера.
Выводы о signature
Умение понимать signature полезно как в JavaScript, так и в прочих функциональных языках. И если нам нужно заимствовать любую чистую функцию, мы можем всего лишь обратиться к её signature, чтобы понять, с каким участком кода нам надо работать.
Сигнатура (функции) -- что это в программировании
Сигнатура функции - это описание её заголовка, в которое обычно входят:
- имя функции
- число и тип и порядок следоваения передаваемых в неё параметров (в т.ч. и то как именно они передаются, напр. по ссылке или по значению)
- тип возвращаемого значения
Таким образом, сигнатура - это все что нужно знать (и не более того) о функции вызывающему её коду (т.е. для вызывающего кода важна только сигнатура, сама же реализация может быть черным ящиком).
Примеры
CPU (char* design, int freq)показывает, что метод получает один параметр типа char* и один параметр типа int - при этом функция никаких значений не возвращает (слева от CPU тип возвращаемого значения не указан)
Пример сигнатуры функции, возвращающей значение
public double[] myFunction(int m, int n, int p)-- это функция возвращает double[] (массив вещественных чисел)
Key Words for FKN + antitotal forum (CS VSU):
- сигнатура функции
- что это такое. сигнатура функции определение
- сигнатура определение
Что такое сигнатура Java метода

Дата загрузки: 2017-06-22T18:11:00
Ссылка на фрагмент кода. Строго говоря, сигнатура метода это только его название и тип параметров. Подробнее можно почитать в документации по Java. Свои ответы и вопросы можете оставлять в комментариях.

Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Виктор Уровень 20 Expert
30 ноября 2020
1. Закрытый метод, который возвращает строку, а принимает три параметра со строками и целым числом (метод выполняет функцию напоминалки календаря, оповещает сколько осталось времени до события в указанном месте). 2. Закрытый метод, который возвращает целое число и принимает одно в параметрах (всем выдаётся 100 очков, из которых вычитается использованные очки, таким образом вычисляется и возвращается разница). 3. Закрытый метод, который возвращает строку, а принимает три целочисленных параметра (считает общее расстояние до милях). 4. Всё получится!
9 апреля 2019
1) createCalendarEventReminder/ String eventName, String location, int minutesAway/ String 2) deductPoints/ int pointsUsed/ int 3) findTotalTripLength/ int distanceOfFirstTrip, int distanceOfSecondTrip, int distanceOfThirdTrip/ String
25 июля 2018
Method 1 Method Name: createCalendarEventReminder Input Parameters: String eventName, String location, int minutesAway Return data type: String Method 2 Method Name: deductPoints Input Parameters: int pointsUsed Return data type: int Method 3 Method Name: findTotalTripLength Input Parameters: int distanceOfFirstTrip, int distanceOfSecondTrip, int distanceOfThirdTrip Return data type: String
1 февраля 2018
1. createCalendarEventReminder 2. String eventName, String location, int minutesAway 3. String 1. deductPoints 2. int pointsUsed 3. int 1. findTotalTripLength 2. int distanceOfFirstTrip, int distanceOfSecondTrip, int distanceOfThirdTrip 3. String
Юлия Алпатова Уровень 10
31 декабря 2017
Зачем упоминать в () переменные, которые будут использоваться в методе, если их и так можно использовать внутри метода? Или они типа там объявляются, а потом просто используются?
Andrei Уровень 41
28 июля 2017
В JAVA сигнатура включает в себя ТОЛЬКО: название метода и параметры с типами, учитывая порядок параметров. Ни объявление области видимости, ни тип возвращаемого значения никакого отношения к сигнатуре в JAVA не имеют.
Что такое сигнатура в программировании: терминология и примеры


Сергей Немчинский: Что такое преждевременная оптимизация? Почему это плохо?

Как начинающему программисту оценить качество своего кода?

Сергей Немчинский: Почему ты не развиваешься как программист: причины и что с этим делать?

Сергей Немчинский: Как решать задачи как программист?

Сергей Немчинский: Какие проекты делать начинающему программисту?
Сигнатура означает подпись, на английском signature. В программировании сигнатура позволяет идентифицировать функцию, класс, метод или интерфейс среди многих других. Что такое сигнатура, как она применяется в разных языках и для чего полезна, читайте в данной статье.
Что такое сигнатура в программировании
Сигнатура — это объявление функции или метода, а также его параметры. Сигнатура содержит информацию о том, какие аргументы передаются в функцию или метод, их типы и названия, а также информацию о возвращаемых значениях.
При объявлении функции, сигнатура может содержать следующую информацию:
- имя функции;
- типы и количество параметров.
Например, сигнатура простой функции сложения на JavaScript может выглядеть так:
function add(x, y)
Эта сигнатура содержит имя функции «add», два параметра, «x» и «y», и возвращаемое значение – сумма двух параметров.
Сигнатура функции на C++ может выглядеть следующим образом:
Сигнатура содержит имя функции «swap», которая меняет местами два указателя, «a» и «b», и меняет местами значения объектов, на которые указывают эти указатели.
Сигнатура нужно, чтобы разработчики понимали, как называются функция или метод, и что они возвращают, без необходимости их внедрять и проверять. Это позволяет проще читать, понимать и корректировать код, а также вылавливать ошибки в коде в процессе разработки.

Похожие материалы

Сергей Немчинский: Что такое преждевременная оптимизация? Почему это плохо?

Как начинающему программисту оценить качество своего кода?

Сергей Немчинский: Почему ты не развиваешься как программист: причины и что с этим делать?