Light-industry-up.ru

Экосистема промышленности

Сильная типизация

13-10-2023

Типизация данных

Типобезопасность
Вывод типов
Динамическая типизация
Статическая типизация
Строгая типизация
Мягкая типизация
Зависимые типы
Утиная типизация

Шаблон: ПросмотрОбсуждениеПравить

Строгая типизация — один из вариантов политики работы с типами данных, которая используется в языках программирования.

Содержание

Обязательные условия

Строгая типизация подразумевает выполнение следующих обязательных условий:

  1. Любой объект данных (переменная, константа, выражение) в языке всегда имеет строго определённый тип, который фиксируется на момент компиляции программы (статическая типизация) или определяется во время выполнения (динамическая типизация).
  2. Допускается присваивание переменной только значения, имеющего строго тот же тип данных, что и переменная, те же ограничения действуют в отношении передачи параметров и возврата результатов функций.
  3. Каждая операция требует параметров строго определённых типов.
  4. Неявное преобразование типов не допускается (то есть транслятор воспринимает любую попытку использовать значение не того типа, который был описан для переменной, параметра, функции или операции, как синтаксическую ошибку).

При точном следовании требованиям строгой типизации даже одинаковые по составу значений и допустимым операциям типы данных являются несовместимыми. Если в программе необходимо присвоить значение одного типа данных переменной другого типа, это можно сделать, но только путём явного применения специальной операции преобразования типа, которая в таких случаях обычно является частью языка программирования (хотя может формально и не являться ею, а предоставляться стандартными библиотеками).

Типизация в языках программирования

В информатике и программировании понятие Сильнотипизированный язык означает ситуацию, когда язык программирования накладывает одно или несколько ограничений на употребление операций над разными типами данных. Антоним — слаботипизированный язык. Однако этим терминам придавалось такое множество значений за историю вычислительной техники, что часто трудно понять вне контекста, что автор хотел выразить ими.

Единственный практически используемый язык программирования со строгой статической типизацией — это Ада. Довольно большое число распространённых языков программирования используют нестрогую статическую типизацию. К таким языкам относятся, например Pascal, Модула-2, Java, Fortran. В них обязательно описание типов переменных, параметров и функций, но допускается неявное приведение типов — в случае, если значение одного типа присваивается переменной другого, то компилятор автоматически генерирует код для преобразования значения в нужный тип, если только такое преобразование не приводит к потере данных. Так, например, целое число можно присваивать переменной, объявленной как число с плавающей точкой, а обратное присваиваение без явного приведения типов запрещено, поскольку с высокой вероятностью приведёт к ошибке.

Некоторые языки, формально имеющие понятие типа данных, в действительности можно считать нетипизированными. К таким языкам относится классический Си, в котором, хотя объявление типов и требуется, в действительности все типы данных являются совместимыми по присваиванию (современные компиляторы Си ограничивают эту свободу и выдают, по меньшей мере, предупреждения при опасных преобразованиях типов).

В теории программирования строгая типизация является непременным элементом обеспечения надёжности разрабатываемых программных средств. При правильном применении (подразумевающем, что в программе объявляются и используются отдельные типы данных для логически несовместимых значений) она защищает программиста от простых, но труднообнаруживаемых ошибок, связанных с совместным использованием логически несовместимых значений, возникающих иногда просто из-за элементарной опечатки.

Подобные ошибки выявляются ещё на этапе компиляции программы, тогда как при возможности неявного приведения практически любых типов друг к другу (как, например, в классическом языке Си) эти ошибки выявляются только при тестировании, причём не все и не сразу.

Python является одним из примеров языка со строгой динамической типизацией[1].

Ссылки

  1. Why is Python a dynamic language and also a strongly typed language — PythonInfo Wiki

См. также


Сильная типизация.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06