Система типізації — Вікіпедія
Система типізації (англ. type system) в програмуванні визначає множину припустимих значень даних та множину операцій над даними. Тип даних означає множину значень, які мають певне спільне значення або спосіб застосування (хоча, деякі типи, такі як абстрактні або функційні типи, можуть і не представляти значень у програмі). Системи типізації різних мов програмування істотно різняться одна від одної. Найістотніші відмінності полягають у реалізаціях компіляції та поведінки під час виконання програми.
Присвоєння типу даних (типізація) надає значення набору бітів.
Зазвичай типи надаються або значенням у пам'яті, або об'єктам, таким, як змінні. Оскільки будь-яке значення в комп'ютері складається з множини бітів, апаратне забезпечення не розрізняє навіть адресу, коди операцій, символьні дані, цілі числа. Типи вказують програмам та програмістам на те, як слід обробляти дані.
Системи типізації виконують такі функції:
- Безпечність — застосування типів даних дозволяє компілятору знаходити беззмістовний або неправильний код. Наприклад, можна визначити вираз "Привіт!" + 3 як неправильний, оскільки додавання (у загальному розумінні) рядка до цілого числа не має сенсу. Як зазначено нижче, сильна типізація безпечніша, однак вона не обов'язково гарантує повну безпеку (докладніше дивіться Типобезпечність).
- Оптимізація — статичне перевіряння типів може повідомити додаткову інформацію компілятору. Наприклад, якщо тип даних указує на те, що значення повинні вирівнюватися на границі, кратні 4, компілятор зможе використати ефективніші машинні інструкції.
- Документування — у виразніших системах типізації, типи даних можуть слугувати як вид документації, оскільки вони можуть описувати наміри розробника. Наприклад, довжина може бути підтипом цілих чисел, але, якщо розробник оголошує тип результату функції як довжину, а не просто ціле число, це може частково описувати значення функції.
- Абстрагування (або модульність) — типи даних дозволяють розробникові розмірковувати про програми на вищому рівні, не звертаючи увагу на дрібниці реалізації на нижчому рівні. Наприклад, розробник може вважати рядок значенням, замість простого масиву байт. Або, типи можуть дозволити розробникам виражати інтерфейс між двома підсистемами. Це локалізує потрібні для взаємодії двох підсистем визначення та запобігає появі несумісностей під час взаємодії цих підсистем.
Процес верифікації та впровадження обмежень типів даних — перевіряння типів — може відбуватися під час компіляції (статична типізація) або під час виконання програми (динамічна типізація). Якщо мова програмування вимагає точного зіставлення типів даних (тобто, дозволяючи лише такі операції автоматичного приведення типів, які не призводять до втрати інформації), така мова програмування має сильну типізацію, в іншому разі — слабку.
Статична типізація — механізм, що дозволяє на етапі написання програми визначити через тип об'єкта програми множину припустимих значень та множину операцій над об'єктом так, що порушення вимог типізації призводитиме до попередження або помилки на етапі трансляції програми, а не на етапі її виконання. Тип об'єкта, встановлений під час написання програми, не може бути змінений на етапі виконання програми, але значення, яке містить об'єкт, може бути перетворене (приведене) до іншого типу.
Механізм широко використовується в окремих мовах програмування (званих як мови зі статичною типізацією) і дозволяє зменшити число помилок під час написання програми, але також вимагає явного перетворення типу в разі потреби. Приклади статично типізованих мов — Ada, С++, Pascal.
Мову програмування називають динамічно типізованою, коли основна частина перевірок типів виконується під час виконання програми, а не під час компіляції. У динамічній типізації, значення мають типи, а змінні — ні, тому змінна може містити значення будь-якого типу. До динамічно типізованих мов входять: APL, Erlang, Groovy, JavaScript, LISP, Lua, MATLAB/GNU Octave, Perl (для користувацьких типів, але не для вбудованих типів), PHP, Пролог, Python, Ruby, Smalltalk, Clojure та Tcl.
В окремих мовах зі статичною типізацією може мати місце таке:
3 + 4 = 7 (цілі числа) "3" + "4" = "34" (рядки) 3 + "4" -> невідповідність типів операндів операції, помилка
В окремих мовах з динамічною типізацією може мати місце таке:
3 + 4 -> 7 або 34 залежно від змісту
- Константи, змінні. Типи даних
- Бенджамин Пирс. Типы в языках программирования = Types and programming languages. — 2010.
![]() | Це незавершена стаття про інформаційні технології. Ви можете допомогти проєкту, виправивши або дописавши її. |