Что такое сигнатура функции? 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. Вначале записывается имя функции, потом
Собственно говоря, вполне нормально, когда функция имеет множественные signatures, пока это удобно. Но если она становится чересчур гибкой, следует использовать произвольные переменные Хиндли-Милнера.
Выводы о signature
Умение понимать signature полезно как в JavaScript, так и в прочих функциональных языках. И если нам нужно заимствовать любую чистую функцию, мы можем всего лишь обратиться к её signature, чтобы понять, с каким участком кода нам надо работать.