Система именных типов

редактировать

В информатике, номинальный или именительный падеж система типов (или система типов на основе имени ) является основным классом системы типов, в которой совместимость И эквивалентность типов данных определяется явными объявлениями и / или именами типов. Именные системы используются, чтобы определить, эквивалентны ли типы, а также является ли тип подтипом другого. Это контрастирует со структурными системами , где сравнения основаны на структуре рассматриваемых типов и не требуют явных объявлений.

Содержание

  • 1 Номинальный набор
  • 2 Номинальный подтип
  • 3 Сравнение
  • 4 См. Также
  • 5 Ссылки
  • 6 Источники
  • 7 Внешние ссылки

Номинальный набор

Номинальная типизация означает, что две переменные совместимы по типу тогда и только тогда, когда их объявления называют один и тот же тип. Например, в C два типа structс разными именами в одной и той же единице преобразования никогда не считаются совместимыми, даже если они имеют идентичные объявления полей.

Однако C также допускает объявление typedef , которое вводит псевдоним для существующего типа. Это просто синтаксический и не отличают тип от его псевдонима с целью проверки типа. Эта функция, присутствующая во многих языках, может привести к потере безопасности типов, когда (например) один и тот же примитивный целочисленный тип используется двумя семантически разными способами. Haskell предоставляет синтаксический псевдоним в стиле C в форме объявления type, а также объявления newtype, который вводит новый, особый тип, изоморфен существующему типу.

Номинальный подтип

Аналогичным образом номинальный подтип означает, что один тип является подтипом другого тогда и только тогда. если это явно указано в его определении. Языки с номинальным типом обычно требуют, чтобы объявленные подтипы были структурно совместимыми (хотя Eiffel позволяет объявлять несовместимые подтипы). Однако подтипы, которые структурно совместимы «случайно», но не объявлены как подтипы, не считаются подтипами.

C ++, C#, Java, Objective-C, Delphi, Swift, Julia и Rust все в основном используют как номинальный набор, так и номинальный подтип.

Некоторые языки с номинальными подтипами, такие как Java и C #, позволяют объявлять классы окончательными (или запечатанными в терминологии C #), указывая на то, что дальнейшее создание подтипов запрещено.

Сравнение

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

См. Также

Ссылки

Источники

Внешние ссылки

Последняя правка сделана 2021-05-31 11:55:00
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте