Сувора типізація - студопедія

Розглядаючи приклад з швидким сортуванням Хоара, можна побачити, що крім вже згаданих відмінностей між варіантом на мові C і варіантом на абстрактному функціональній мові, є ще одна важлива відмінність: функція на C сортує список значень типу int (цілих чисел), а функція на абстрактному функціональній мові - список значень будь-якого типу, який належить до класу впорядкованих величин. Тому остання функція може сортувати і список цілих чисел, і список чисел з плаваючою точкою, і список рядків. Можна описати який-небудь новий тип. Визначивши для цього типу операції порівняння, можливо без перекомпіляції використовувати quickSort і зі списками значень цього нового типу. Це корисна властивість системи типів називається параметричним або істинним поліморфізмом, і підтримується більшістю функціональних мов.

Ще одним різновидом поліморфізму є перевантаження функцій, що дозволяє давати різним, але в чомусь схожим функцій однакові імена. Типовим прикладом перевантаженої операції є звичайна операція додавання. Функції складання для цілих чисел і чисел з плаваючою точкою різні, проте для зручності вони носять одне і те ж ім'я. Деякі функціональні мови крім параметричного поліморфізму, підтримують і перевантаження операцій.

У мові C ++ є таке поняття, як шаблон, яке дозволяє програмісту визначати поліморфні функції, подібні quickSort. У стандартну бібліотеку C ++ STL входить така функція і безліч інших поліморфних функцій. Але шаблони C ++, як і родові функції Ada, насправді породжують безліч перевантажених функцій, які, до речі, компілятор повинен кожен раз компілювати, що несприятливо позначається на часі компіляції та розмірі коду. А в функціональних мовах поліморфна функція quickSort - це одна єдина функція.

У деяких мовах, наприклад в Ada, сувора типізація змушує програміста явно описувати тип всіх значень і функцій. Щоб уникнути цього, в строго типізовані функціональні мови вбудований спеціальний механізм, що дозволяє компілятору визначати типи констант, виразів і функцій з контексту. Цей механізм називається механізмом виведення типів. Відомо кілька таких механізмів, проте більшість з них є різновидами моделі типізації Хиндли-Мілнера, розробленої на початку 80-х років XX століття. Таким чином, в більшості випадків можна не вказувати типи функцій.

Схожі статті