Что такое сигнатура функции? Signature (сигнатура) — это что? | OTUS
🔥 BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Highload Architect
-25%
JavaScript Developer. Basic
-25%
Kotlin Backend Developer
-25%
JavaScript Developer. Professional
-25%
Android Developer. Basic
-25%
Unity Game Developer. Basic
-25%
Разработчик C#
-25%
Программист С Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Reverse-Engineering. Professional CI/CD Vue.js разработчик VOIP инженер Программист 1С Flutter Mobile Developer Супер - интенсив по Kubernetes Symfony Framework Advanced Fullstack JavaScript developer Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «IaC Ansible»
-16%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-25%
Супер-интенсив "SQL для анализа данных"
-16%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Администратор Linux. Виртуализация и кластеризация Нереляционные базы данных Супер-практикум по использованию и настройке GIT IoT-разработчик Супер-интенсив «ELK»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!