Перейти к содержанию

Система типов, тип данных, значимые и ссылочные типы

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

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

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

Система Типов

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

В основе системы типов любого языка программирования всегда лежит базисная система типов, встроенных в язык. К базисным, или встроенным, типам данных относятся такие типы, как byte, int, string, boolean, object и им подобные. На их основе среда выполнения или разработчик могут определять типы данных более высокого уровня, например Date или Array.

Тип данных (тип)

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

В зависимости от языка программирования, тип данных может хранить информацию о данных, к которым относятся поля, свойства, методы и другие структуры языка, а также о том, в каком месте, в стеке (stack) или куче (heap) будет выделяться память во время выполнения программы, а также её объем; в каких операциях (как, например, сложение +, умножение *, присваивание = и т.д.) может участвовать тип данных.

Типы данных делятся на два вида:

  • типы значения (value type) - хранят значение (их ещё называют значимыми типами)
  • ссылочные типы (reference types) - хранят ссылку на значение.

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

Тип данных, передающийся по значению (примитивный тип)

Когда переменная, ассоциированная со значением, принадлежащим к значимому типу данных, участвует в операции присвоения, операнд из левой части будет ассоциирован не со значением правого операнда, а с его копией. Другими словами, значение будет дублировано в памяти и переменные будут ассоциированы с разными значениями-участками памяти. При изменении любой переменной своего значения, значения других переменных затронуты не будут.

Тип данных, передающийся по значению

Обычно говорят, что переменные с типом значения хранят значение и передаются по значению.

Тип данных, передающийся по ссылке

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

Тип данных, передающийся по ссылке

Обычно говорят, что переменные ссылочного типа ссылаются на значение и передаются по ссылке.

Итоги

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