👋 Канал OTUS в Telegram!
Посты от приглашенных гостей из IT-тусовки, полезные статьи, подборки вакансий от партнеров ➞
Подробнее

Курсы

Программирование
Архитектор программного обеспечения
-40%
Архитектура и шаблоны проектирования
-40%
Разработчик C++
-40%
Fullstack разработчик JavaScript
-40%
MS SQL Server разработчик
-40%
Android-разработчик. Продвинутый курс
-40%
Алгоритмы и структуры данных
-30%
Team Lead
-30%
Разработчик Python. Базовый курс
-30%
Разработчик Python. Продвинутый курс
-22%
iOS Разработчик. Продвинутый курс
-21%
CI/CD
-37%
Разработчик C#
-25%
PostgreSQL Framework Laravel Web-разработчик на Python Разработчик программных роботов (RPA) на базе UiPath и PIX Разработчик игр на Unity Vue.js разработчик Agile Project Manager в IT Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

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

signa-20219-76f842.png Как известно, интерфейс прикладного программирования, именуемый 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, чтобы понять, с каким участком кода нам надо работать.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться