13-10-2023
|
---|
Типобезопасность |
Строгая типизация — один из вариантов политики работы с типами данных, которая используется в языках программирования.
Содержание |
Строгая типизация подразумевает выполнение следующих обязательных условий:
При точном следовании требованиям строгой типизации даже одинаковые по составу значений и допустимым операциям типы данных являются несовместимыми. Если в программе необходимо присвоить значение одного типа данных переменной другого типа, это можно сделать, но только путём явного применения специальной операции преобразования типа, которая в таких случаях обычно является частью языка программирования (хотя может формально и не являться ею, а предоставляться стандартными библиотеками).
В информатике и программировании понятие Сильнотипизированный язык означает ситуацию, когда язык программирования накладывает одно или несколько ограничений на употребление операций над разными типами данных. Антоним — слаботипизированный язык. Однако этим терминам придавалось такое множество значений за историю вычислительной техники, что часто трудно понять вне контекста, что автор хотел выразить ими.
Единственный практически используемый язык программирования со строгой статической типизацией — это Ада. Довольно большое число распространённых языков программирования используют нестрогую статическую типизацию. К таким языкам относятся, например Pascal, Модула-2, Java, Fortran. В них обязательно описание типов переменных, параметров и функций, но допускается неявное приведение типов — в случае, если значение одного типа присваивается переменной другого, то компилятор автоматически генерирует код для преобразования значения в нужный тип, если только такое преобразование не приводит к потере данных. Так, например, целое число можно присваивать переменной, объявленной как число с плавающей точкой, а обратное присваиваение без явного приведения типов запрещено, поскольку с высокой вероятностью приведёт к ошибке.
Некоторые языки, формально имеющие понятие типа данных, в действительности можно считать нетипизированными. К таким языкам относится классический Си, в котором, хотя объявление типов и требуется, в действительности все типы данных являются совместимыми по присваиванию (современные компиляторы Си ограничивают эту свободу и выдают, по меньшей мере, предупреждения при опасных преобразованиях типов).
В теории программирования строгая типизация является непременным элементом обеспечения надёжности разрабатываемых программных средств. При правильном применении (подразумевающем, что в программе объявляются и используются отдельные типы данных для логически несовместимых значений) она защищает программиста от простых, но труднообнаруживаемых ошибок, связанных с совместным использованием логически несовместимых значений, возникающих иногда просто из-за элементарной опечатки.
Подобные ошибки выявляются ещё на этапе компиляции программы, тогда как при возможности неявного приведения практически любых типов друг к другу (как, например, в классическом языке Си) эти ошибки выявляются только при тестировании, причём не все и не сразу.
Python является одним из примеров языка со строгой динамической типизацией[1].
Сильная типизация.