Строгая типизация | это... Что такое Строгая типизация? (original) (raw)

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. JLS 7. Chapter 4. Types, Values, and Variables
  2. Why is Python a dynamic language and also a strongly typed language — PythonInfo Wiki

См. также

Есть более полная статья