Jump to content

Система номинального типа

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

Номинальный тип [ править ]

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

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

Номинальный подтип [ править ]

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

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

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

Сравнение [ править ]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ «Отчет Haskell 2010: Объявления и привязки: определяемые пользователем типы данных» . Архивировано из оригинала 4 января 2017 г. Проверено 2 июня 2015 г.

Источники [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2a9769e6e98f00238d55a6530b277824__1711499400
URL1:https://arc.ask3.ru/arc/aa/2a/24/2a9769e6e98f00238d55a6530b277824.html
Заголовок, (Title) документа по адресу, URL1:
Nominal type system - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)