Сигнатура означає підпис, англійською signature. У програмуванні сигнатура дає змогу ідентифікувати функцію, клас, метод або інтерфейс серед багатьох інших. Що таке сигнатура, як вона застосовується в різних мовах і для чого корисна, читайте в цій статті.
Що таке сигнатура в програмуванні
Сигнатура – це оголошення функції або методу, а також його параметри. Сигнатура містить інформацію про те, які аргументи передаються у функцію або метод, їхні типи та назви, а також інформацію про значення, що повертаються.
Під час оголошення функції, сигнатура може містити таку інформацію:
ім’я функції;
типи та кількість параметрів.
Наприклад, сигнатура простої функції додавання на JavaScript може мати такий вигляд:
////javascript
function add(x, y) {
return x + y;
}
////
Ця сигнатура містить ім’я функції “add”, два параметри, “x” і “y”, і значення, що повертається, – суму двох параметрів.
Сигнатура функції на C++ може мати такий вигляд:
////c++
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
////
Сигнатура містить ім’я функції “swap”, яка міняє місцями два покажчики, “a” і “b”, і міняє місцями значення об’єктів, на які вказують ці покажчики.
Сигнатура потрібна, щоб розробники розуміли, як називаються функція або метод, і що вони повертають, без необхідності їх впроваджувати і перевіряти. Це дає змогу простіше читати, розуміти і коригувати код, а також виловлювати помилки в коді в процесі розробки.
Сигнатура містить інформацію про те, які аргументи приймає функція і яке значення вона повертає. Наприклад, наведена вище JavaScript-функція “add” приймає два аргументи “x” і “y” і повертає їхню суму. Це очевидно з сигнатури.
Сигнатура класу
Сигнатура класу містить інформацію про конструктор, методи та властивості класу. Наприклад, у C++ клас “Stack” повідомляє:
////c++
class Stack {
public:
Stack();
~Stack();
void push(int x);
int pop();
private:
int *arr;
};
////
У ній зазначено, що у класу є конструктор “Stack()”, деструктор “~Stack()”, методи push(int x) і pop(). Так само зазначено, що у класу є приватне поле “arr”.
Сигнатура методу
Сигнатура методу містить інформацію про те, які аргументи приймає метод і яке значення він повертає. Наприклад, у методу “swap” у Java сигнатура повідомляє:
////java
int swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
////
Тут зазначено, що метод swap приймає два аргументи int a і int b і повертає їх же, помінявши місцями.
Сигнатура інтерфейсу
Сигнатура інтерфейсу містить інформацію про методи та властивості класів, пов’язаних із взаємодією інтерфейсу. Наприклад, у Java сигнатура інтерфейсу “Comparable” повідомляє:
////java
public interface Comparable {
int compareTo(Object obj);
}
////
Тут повідомляється, що зазначений клас має застосувати метод compareTo.
Різні типи сигнатур потрібні розробникам, щоб розуміти структуру та поведінку об’єктів і методів та уникати помилок і непослідовностей у коді.
Сигнатура в різних мовах програмування
У мові С++ сигнатура методу або класу визначає його тип і кількість параметрів, що передаються в метод під час виклику. Сигнатура методу або класу в С++ містить:
ім’я методу/класу;
список імен параметрів;
список типів параметрів;
список ключових слів доступності (public, private, protected, friend);
список ключових слів спадщини (public, private, protected);
список ключових слів параметрів (in, out, constant).
Приклад сигнатури методу:
////c
int add(int a, int b) {
return a+b;
}
////
У цій сигнатурі методу є ім’я методу add, а також два параметри int a і int b. Також є ключове слово int наприкінці, яке вказує на тип даних int, що повертається. Ключове слово in вказує на те, що параметри не можуть бути змінені всередині методу, а параметри out і constant вказують на те, що параметри можуть бути змінені як всередині, так і зовні методу. Ключове слово private вказує на те, що метод може бути викликаний тільки з класу, в якому він був оголошений.
Сигнатура в мові Java
У мові Java сигнатура містить таку інформацію:
ім’я методу, конструктора або поля;
список типів параметрів, який вказує на тип даних, які метод, конструктор або поле приймає як параметри;
список типів значення, що повертається, який вказує на тип даних, який метод, конструктор або поле повертає;
модифікатори доступу (public, private, protected, static, final, volatile тощо), які вказують на доступність методу, конструктора або поля;
ключові слова (abstract, static, final) для успадкування.
Приклад сигнатури методу:
////java
int sum(int a, int b) {
return a+b;
}
////
У цій сигнатурі методу є ім’я методу sum, а також два параметри int a і int b. Також є ключове слово int наприкінці, яке вказує на тип даних int, що повертається.
Особливості застосування сигнатури в JavaScript
JavaScript не є мовою суворої типізації. Типізація в ній динамічна, вільна від обмежень типів. Саме тому в JavaScript сигнатури особливо важливі. У коді вони можуть виглядати як стрілки над функціями із зазначенням типів.
Курс JavaScript Start – це чудова можливість вивчити одну з найбільш затребуваних мов програмування у вашому темпі та у зручний час. Уже записані лекції дозволять вам гнучко планувати свій час і навчатися в зручному для вас темпі. На курсі ви опануєте всі основи мови Javascript, а також навчитеся створювати інтерактивні веб-додатки та сайти. Приєднуйтесь до JavaScript Start і почніть свій шлях в освоєнні JS.
Компілятор у JavaScript може самостійно вивести тип для будь-якого виразу, використовуючи систему Хіндлі-Міленар. Але іноді, особливо у випадках використання параметричного поліморфізму, виникають складнощі з визначенням типу виразу. Тому тип виразу рекомендується вказувати в сигнатурі, що дає змогу відстежувати роботу функції.
Один із можливих прикладів використання сигнатури:
// length :: String → Number
const length = s => s.length;
У цьому прикладі цікаво те, що перед стрілкою записано вхідний тип length, а після стрілки – тип s.length, що повертається. Якщо освоїти навичку читання таких сигнатур, це зробить роботу з кодом на JavaScript помітно простішою.
Замість висновку
Уміння розуміти signature корисне як у JavaScript, так і в інших функціональних мовах. І якщо нам потрібно запозичити будь-яку чисту функцію, ми можемо лише звернутися до її signature, щоб зрозуміти, з якою ділянкою коду нам треба працювати.
Використання сигнатур дає змогу зменшити кількість помилок і полегшити підтримку коду. Я зіткнувся з ситуаціями, коли відсутність сигнатур призводила до непередбачуваних помилок і ускладнювала налагодження коду.
Як правильно написати сигнатуру функції?
Сигнатура функції повинна містити ім'я функції, тип значення, що повертається, і типи параметрів. Наприклад, def my_function(param1: int, param2: str) -> bool:
Які інструменти та мови програмування підтримують використання сигнатур?
Багато мов програмування, такі як Python, TypeScript, Java, C# і Kotlin, підтримують використання сигнатур. Я працював з Python і Java і використовував сигнатури в обох мовах.
Чи може використання сигнатур призвести до збільшення обсягу коду?
Так, використання сигнатур може призвести до збільшення обсягу коду, але це може скоротити кількість помилок і спростити підтримку коду. Спираючись на особистий досвід, я помітив, що використання сигнатур може зробити код більш читабельним і зрозумілим для інших розробників.
Як сигнатури пов'язані з тестуванням коду?
Використання сигнатур може спростити тестування коду, оскільки вони допомагають визначити очікуваний тип значення, що повертається, і типи параметрів. Я використовував сигнатури разом із фреймворками тестування, такими як Jest і Pytest, щоб створювати тести для функцій.
Які інструменти та ресурси допоможуть мені покращити свої навички написання сигнатур?
Існує безліч онлайн-курсів і ресурсів для вивчення сигнатур у програмуванні. Я рекомендую менторинг на FoxmindED, а також офіційну документацію мов програмування, які ви використовуєте. Також корисно вивчити код інших розробників і практикуватися в написанні сигнатур на практиці.
Напишіть у коментарях, що ще ви хочете знати про сигнатуру!
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.
3rd Party Cookies
This website uses Google Analytics to collect anonymous information such as the number of visitors to the site, and the most popular pages.
Keeping this cookie enabled helps us to improve our website.
Please enable Strictly Necessary Cookies first so that we can save your preferences!
Напишіть у коментарях, що ще ви хочете знати про сигнатуру!