Огляди, рейтинги та поради з вибору техніки 2026
Hi-News: Цифровий Світ » Компютери » Що таке динамічна типізація?

Що таке динамічна типізація?

10.12.2017, 21:59
2 754
0
Щоб максимально просто пояснити дві абсолютно різні технології, почнемо спочатку. Перше, з чим стикається програміст при написання коду – оголошення змінних. Ви можете помітити, що, наприклад, в мові програмування C++ необхідно вказувати тип змінної. Тобто якщо ви оголошуєте змінну x, то обов'язково потрібно додати int – для зберігання цілочисельних даних, float – для зберігання даних з плаваючою точкою, char – для символьних даних, і інші доступні типи. Отже, в C++ використовується статична типізація, так само як і у його попередника C.


Як працює статична типізація?

У момент оголошення змінної компілятору потрібно знати, які функції і параметри він може використовувати по відношенню до неї, а які ні. Тому програмісту необхідно відразу чітко визначити тип змінної. Зверніть увагу також на те, що в процесі виконання коду тип змінної змінити не можна. Зате можна створити свій власний тип даних і використовувати його в подальшому. Розглянемо невеликий приклад. При ініціалізації змінної x (int x;) ми вказуємо ідентифікатор int - це скорочення від типу Integer, який зберігає тільки цілі числа в діапазоні від– 2147483 648 до 2147483 647. Таким чином, компілятор розуміє, що може виконувати над цією змінної математичні значення – суму, різницю, множення і ділення. А ось, наприклад, функцію strcat(), яка з'єднує два значення типу char, застосувати до x не можна. Адже якщо зняти обмеження і спробувати з'єднати два значення int символьним методом, тоді станеться помилка.


Навіщо знадобилися мови з динамічною типізацією?

Незважаючи на деякі обмеження, статична типізація має ряд переваг, і не вносить великого дискомфорту в написання алгоритмів. Тим не менш, для різних цілей можуть знадобитися і більш «вільні правила» щодо типів даних. Вдалий приклад, який можна привести – jаvascript. Ця мова програмування зазвичай використовують для вбудовування в фреймворк з метою отримання функціонального доступу до об'єктів. З-за такої особливості він придбав велику популярність в web-технологіях, де ідеально відчуває себе динамічна типізація. В рази спрощується написання невеликих скриптів і макросів. А також з'являється перевага у повторному використанні змінних. Але таку можливість використовують досить рідко, з-за можливих путаниц і помилок.

Який вид типізації краще?

Суперечки про те, що динамічна типізація краще, ніж сувора, не припиняються і досі. Зазвичай вони виникають у вузькоспеціалізованих програмістів. Безумовно, веб-розробники повсякденно використовують всі переваги динамічної типізації для створення якісного коду і підсумкового програмного продукту. У той же час системні програмісти, які розробляють складні алгоритми на низькорівневих мовах програмування, зазвичай не потребують таких можливостях, тому їм цілком вистачає статичної типізації. Бувають, звичайно, винятки з правил. Наприклад, повністю реалізована динамічна типізація в Python.
Тому визначати лідерство тієї чи іншої технології, потрібно виходячи тільки з вхідних параметрів. Для розробки легких і гнучких фреймворків краще підійде динамічна типізація, у той час як для створення масивної і складної архітектури краще використовувати строгу типізацію.

Поділ на «сильну» і «слабку» типізацію

Серед як російськомовних, так і англомовних матеріалів з програмування можна зустріти вираз – «сильна» типізація. Це не окреме поняття, а точніше такого поняття в професійному лексиконі взагалі не існує. Хоча багато хто намагається його по-різному інтерпретувати. Насправді, «сильну» типізацію слід розуміти як ту, яка зручна саме для вас і з якою максимально комфортно працювати. А «слабка» - незручна і неефективна для вас система.

Особливість динаміки

Напевно ви помічали, що на стадії написання коду компілятор аналізує написані конструкції і видасть помилку при неспівпадання типів даних. Але тільки не jаvascript. Його унікальність у тому, що він у будь-якому випадку справить операцію. Ось легкий приклад – ми хочемо скласти символ і число, що не має сенсу: «x» + 1. У статичних мовами, в залежності від самої мови, ця операція може мати різні наслідки. Але в більшості випадків, її навіть не допустять до компіляції, так як компілятор видасть помилку відразу після написання такої конструкції. Він просто вважатиме її некоректною і буде повністю прав. У динамічних мовами цю операцію можна виконати, але в більшості випадків буде помилка вже на стадії виконання коду, так як компілятор не аналізує в реальному часі типи даних і не може приймати рішення про помилки в цій області. jаvascript унікальний тим, що виконає таку операцію і отримає набір незрозумілих символів. На відміну від інших мов, які просто завершать роботу програми.

Можливі суміжні архітектури?

На даний момент ніякої суміжній технології, яка могла б одночасно підтримувати статичну і динамічну типізацію в мовах програмування, не існує. І можна впевнено сказати, що не з'явиться. Так як архітектури відрізняються один від одного в фундаментальних поняттях і не можуть використовуватися одночасно.
Але, тим не менш, в деяких мовах можна поміняти типізацію за допомогою додаткових фреймворків. У мові програмування Delphi – підсистема Variant. У мові програмування AliceML – додаткові пакети. У мові програмування Haskell – бібліотека Data.Dynamic.

Коли сувора типізація дійсно краще динамічної?

Однозначно затвердити перевагу суворої типізації над динамічної можна тільки в тому випадку, якщо ви програміст-початківець. У цьому сходяться абсолютно всі IT-фахівці. При навчанні основним і базовим навичкам програмування краще використовувати строгу типізацію, щоб придбати якусь дисципліну при роботі зі змінними. Потім, при необхідності, можна перейти на динаміку, але навички роботи, придбані зі строгою типізацією, відіграють свою важливу роль. Ви навчитеся ретельно перевіряти змінні і враховувати їх типи, при проектуванні і написанні коду.

Переваги динамічної типізації

Зводить до мінімуму кількість символів і рядків коду через непотрібність попереднього оголошення змінних та зазначення їх типу. Тип буде визначено автоматично, після присвоєння значення. У невеликих блоках коду спрощується візуальне і логічне сприйняття конструкцій, з-за відсутності «зайвих» рядків оголошення. Динаміка позитивно впливає на швидкість роботи компілятора, так як він не враховує типи, і не перевіряє їх на відповідність. Підвищує гнучкість і дозволяє створювати універсальні конструкції. Наприклад, при створенні методу, який повинен взаємодіяти з масивом даних, не потрібно створювати окремі функції для роботи з числовими, текстовими та іншими типами масивів. Достатньо написати один метод, і він буде працювати з будь-якими типами. Спрощує вивід даних з систем управління базами даних, тому динамічну типізацію активно використовують при розробці веб-додатків. Якщо була допущена помилка або груба помилка при використанні або оголошення змінних, то компілятор не відобразить її. А проблеми виникнуть при виконанні програми. При використанні статичної типізації всі оголошення змінних і функцій зазвичай виносяться в окремий файл, який дозволяє надалі з легкістю створити документацію або взагалі використати сам файл як документацію. Відповідно, динамічна типізація не дозволяє використовувати таку особливість.

Детальніше про мови програмування зі статичною типізацією

C++ - найбільш популярна мова програмування загального призначення. На сьогоднішній день має кілька великих редакцій і велику армію користувачів. Став популярним завдяки своїй гнучкості, можливості безмежного розширення і підтримки різних парадигм програмування.
Java – мова програмування, який використовує об'єктно-орієнтований підхід. Отримав розповсюдження завдяки мультиплатформенність. При компіляції код інтерпретується в байт-код, який може виконуватися на будь-якій операційній системі. Java і динамічна типізація несумісні, так як мова суворо типізований.
Haskell – також один з популярних мов, код якого може інтегруватися в інші мови і взаємодіяти разом з ними. Але, незважаючи на таку гнучкість, має строгу типізацію. Оснащений великим вбудованим набором типів і можливістю створення власних.

Детальніше про мови програмування з динамічним видом типізації

Python – мова програмування, який створювався насамперед для полегшення роботи програміста. Має ряд функціональних поліпшень, завдяки яким збільшує читабельність коду і його написання. У чому цього вдалося домогтися завдяки динамічної типізації.
PHP – мова для створення скриптів. Повсюдно застосовується в веб-розробці, забезпечуючи взаємодію з базами даних, для створення інтерактивних динамічних веб-сторінок. Завдяки динамічної типізації істотно полегшується роботи з базами даних.
jаvascript – вже згадуваний вище мова програмування, який знайшов застосування у веб-технологіях для створення веб-сценаріїв, що виконуються на стороні клієнта. Динамічна типізація використовується для полегшення написання коду, адже зазвичай він розбивається на невеликі блоки.

Динамічний вид типізації недоліки

Якщо була допущена помилка або груба помилка при використанні або оголошення змінних, то компілятор не відобразить її. А проблеми виникнуть при виконанні програми. При використанні статичної типізації всі оголошення змінних і функцій зазвичай виносяться в окремий файл, який дозволяє надалі з легкістю створити документацію або взагалі використати сам файл як документацію. Відповідно, динамічна типізація не дозволяє використовувати таку особливість.

Підіб'ємо підсумок

Статична і динамічна типізації використовуються для абсолютно різних цілей. У деяких випадках розробники мають функціональні переваги, а в деяких – суто особисті мотиви. У будь-якому випадку, щоб визначитися з видом типізації для себе, необхідно ретельно вивчити їх на практиці. Надалі при створенні нового проекту і вибору типізації для нього це зіграє велику роль і дасть розуміння ефективного вибору.
Схожі статті
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в Сі - клас даних, значення яких мають схожі характеристики. Тип визначає внутрішнє подання даних у пам'яті. Основні типи даних:
Що таке var Pascal
Що таке var Pascal
Змінні пов'язані з місцями зберігання даних і їх значення змінюються в ході виконання програми. Найбільш поширене трактування, що таке змінна
Python: типи даних, умови, вимоги і приклади
Python: типи даних, умови, вимоги і приклади
Основними типами даних в Python відносяться числа, рядки, словники, списки, кортежі, множини і логічні значення. Вони є базовими, вбудованими
Прокомментировать
Натисніть на зображення, щоб оновити код, якщо він нерозбірливий