Каламбур типизации


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

Языки Си и C++ предоставляют явные возможности каламбура типизации посредством таких конструкций, как приведение типов, union, а также reinterpret_cast для C++, хотя стандарты этих языков некоторые случаи таких каламбуров трактуют, как неопределённое поведение.

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

Каламбур типизации является прямым нарушением типобезопасности. Традиционно возможность построить каламбур типизации связывается со слабой типизацией, но и некоторые сильно типизированные языки или их реализации предоставляют такие возможности (как правило, используя в связанных с ними идентификаторах слова unsafe или unchecked). Сторонники типобезопасности утверждают, что «необходимость» каламбуров типизации является мифом[1].

JS позволяет неявное приведение типов между строками и числами, что может приводить к нелогичным результатам, например:

Оператор + для чисел работает как сложение, а для строк как конкатенация, однако оператор - работает только как вычитание для чисел, поэтому в последнем выражении мы получаем "22" - "2" что приводит к значению 20.