Из Википедии, бесплатной энциклопедии
  (Перенаправлен из Type (информатика) )
Перейти к навигации Перейти к поиску
Стандартная иерархия типов Python 3

В информатике и компьютерном программировании , с типом данных или просто типа является атрибутом данных , который говорит компилятор или интерпретатор , как программист намеревается использовать данные. Большинство языков программирования поддерживают основные типы данных: целые числа (разного размера), числа с плавающей запятой (которые приблизительно соответствуют действительным числам), символы и логические значения . Тип данных ограничивает значения, которые выражение, например, переменная или функция, может принимать. Этот тип данных определяет операции, которые могут быть выполнены с данными, значение данных и способ сохранения значений этого типа. Тип данных предоставляет набор значений, из которых выражение (например, переменная, функция и т. Д.) Может принимать свои значения. [1] [2]

Концепция [ править ]

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

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

Общие типы данных включают:

Например, в языке программирования Java тип int представляет собой набор 32-битных целых чисел в диапазоне от -2 147 483 648 до 2 147 483 647, а также операции, которые могут выполняться с целыми числами, такие как сложение, вычитание и умножение. С другой стороны, цвет может быть представлен тремя байтами, обозначающими количество красного, зеленого и синего цветов, и строкой, представляющей имя цвета.

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

Большинство типов данных в статистике имеют сопоставимые типы в компьютерном программировании и наоборот, как показано в следующей таблице:

Определение [ править ]

( Parnas, Shore & Weiss, 1976 ) выделили пять определений «типа», которые использовались - иногда неявно - в литературе. Типы, включающие поведение, больше соответствуют объектно-ориентированным моделям, тогда как модель структурированного программирования , как правило, не включает код и называются простыми старыми структурами данных .

Вот пять типов:

Синтаксический
Тип - это чисто синтаксическая метка, связанная с объявленной переменной . Такие определения «типа» не придают типам семантического значения. [ требуется разъяснение ]
Представление
Тип определяется в терминах его состава более примитивных типов - часто машинных типов.
Представление и поведение
Тип определяется как его представление и набор операторов, управляющих этими представлениями.
Пространство значений
Тип - это набор возможных значений, которыми может обладать переменная. Такие определения позволяют говорить о ( непересекающихся ) объединениях или декартовых произведениях типов.
Ценностное пространство и поведение
Тип - это набор значений, которыми может обладать переменная, и набор функций, которые можно применить к этим значениям.

Определение в терминах представления часто выполнялось в императивных языках, таких как ALGOL и Pascal , в то время как определение в терминах пространства значений и поведения использовалось в языках более высокого уровня, таких как Simula и CLU .

Классы типов данных [ править ]

Примитивные типы данных [ править ]

Примитивные типы данных обычно являются типами, встроенными или базовыми для языковой реализации.

Типы машинных данных [ править ]

Все данные в компьютерах на базе цифровой электроники представлены в виде битов (варианты 0 и 1) на самом низком уровне. Наименьшая адресуемая единица данных обычно представляет собой группу битов, называемую байтом (обычно октет , который составляет 8 бит). Единица, обрабатываемая инструкциями машинного кода, называется словом (по состоянию на 2011 год , обычно 32 или 64 бита). Большинство инструкций интерпретируют слово как двоичное число , так что 32-битное слово может представлять целые числа без знака от 0 до или целые числа со знаком от до . Из-за дополнения двухмашинному языку и машине по большей части не нужно различать эти беззнаковые и подписанные типы данных.

Числа с плавающей запятой, используемые для арифметики с плавающей запятой, используют другую интерпретацию битов в слове. Подробнее см. Арифметика с плавающей запятой .

Типы машинных данных должны быть открыты или сделаны доступными в системах или языках программирования низкого уровня , чтобы обеспечить точный контроль над оборудованием. С языком программирования , например, поставляет целые типов различной ширины, например, shortи long. Если соответствующий собственный тип не существует на целевой платформе, компилятор разбивает их на код, используя типы, которые действительно существуют. Например, если 32-битное целое число запрашивается на 16-битной платформе, компилятор неявно обрабатывает его как массив из двух 16-битных целых чисел.

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

Логический тип [ править ]

Тип Boolean представляет значения true и false . Хотя возможны только два значения, они редко реализуются как одна двоичная цифра из соображений эффективности. Многие языки программирования не имеют явного логического типа, вместо этого интерпретируя (например) 0 как ложь, а другие значения как истину. Логические данные относятся к логической структуре того, как язык интерпретируется на машинном языке. В этом случае логический 0 относится к логике False. Истина всегда ненулевой, особенно такой, который известен как логическое 1.

Перечисления [ править ]

Перечислимый тип имеет различные значения, которые могут быть сопоставлены и присвоенными, но которые не обязательно имеют какое - либо конкретное представления бетонного в памяти компьютера; компиляторы и интерпретаторы могут представлять их произвольно. Например, четыре масти в колоде игральных карт могут быть четырьмя счетчиками с именами КЛУБ , АЛМАЗ , СЕРДЦЕ , ЛОПАТА , принадлежащими пронумерованному типу с именем масть . Если переменная V объявляется имеющей мастьв качестве типа данных ему можно присвоить любое из этих четырех значений. Некоторые реализации позволяют программистам присваивать целочисленные значения значениям перечисления или даже рассматривать их как эквивалентные целым числам по типу.

Числовые типы [ править ]

Такой как:

  • В число типов данных, или «не-дробные числа». Могут быть подтипами в соответствии с их способностью содержать отрицательные значения (например, unsignedв C и C ++). Также может иметь небольшое количество предопределенных подтипов (например, shortи longв C / C ++); или позволить пользователям свободно определять поддиапазоны, такие как 1..12 (например, Pascal / Ada ).
  • Типы данных с плавающей запятой обычно представляют значения как дробные значения высокой точности ( рациональные числа , математически), но иногда ошибочно называются реальными числами (напоминающими математические действительные числа ). У них обычно есть предопределенные пределы как для их максимальных значений, так и для их точности. Обычно хранится внутри в виде a × 2 b (где a и b - целые числа), но отображается в знакомой десятичной форме.
  • Типы данных с фиксированной запятой удобны для представления денежных величин. Они часто реализуются внутри как целые числа, что приводит к заранее определенным ограничениям.
  • Числовые типы Bignum или произвольной точности не имеют предопределенных ограничений. Они не являются примитивными типами и используются редко из соображений эффективности.

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

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

  • Массив (называемая также вектор, список , или последовательность) хранит число элементов и обеспечить произвольный доступ к отдельным элементам. Элементы массива обычно (но не во всех контекстах) должны быть одного типа. Массивы могут быть фиксированной длины или расширяемыми. Индексы в массиве обычно должны быть целыми числами (в противном случае можно подчеркнуть это ослабление, говоря об ассоциативном массиве ) из определенного диапазона (если не все индексы в этом диапазоне соответствуют элементам, это может быть разреженный массив ).
  • Запись (также называемая кортежем или структурой) Записи относятся к простейшим структурам данных . Запись - это значение, которое содержит другие значения, обычно с фиксированным числом и последовательностью и обычно индексируемые по именам. Элементы записей обычно называют полями или членами .
  • Союз . Определение типа объединения будет указывать, какой из ряда разрешенных типов примитивов может храниться в его экземплярах, например, «с плавающей запятой или длинное целое число». В отличие от записи , которая может быть определена как содержащая число с плавающей запятой и целое число; тогда как в объединении одновременно разрешен только один тип.
    • Меченого союз (также называемый вариант , вариант записи, дискриминированным объединение или объединение непересекающихся) содержит дополнительное поле , указывающее его текущий тип для повышения безопасности типа.
  • Множество не является абстрактной структурой данных , которая может хранить определенные значения, без какого - либо конкретного порядка , и не повторяется значение. Сами значения не извлекаются из наборов, скорее, значение проверяется на членство, чтобы получить логическое значение «in» или «not in».
  • Объект содержит ряд полей данных, как записи, а также ряд подпрограмм для доступа или модификации их, называемые методы .

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

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

Такой как:

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

Типы символов и строк могут хранить последовательности символов из набора символов, такого как ASCII . Поскольку большинство наборов символов включают цифры , возможна числовая строка, например "1234". Однако во многих языках они относятся к другому типу числового значения 1234.

Типы символов и строк могут иметь разные подтипы в зависимости от требуемой «ширины» символа. Исходный 7-битный ASCII оказался ограниченным и заменен 8- и 16-битными наборами, которые могут кодировать широкий спектр нелатинских алфавитов (таких как иврит и китайский ) и другие символы. Строки могут быть растянутыми по размеру или фиксированного размера, даже на одном языке программирования. Они также могут быть разделены на подтипы по их максимальному размеру.

Примечание. Строки не являются примитивным типом данных во всех языках. В C , например, они состоят из массива символов.

Абстрактные типы данных [ править ]

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

Beyond verification, a specification might immediately be turned into an implementation. The OBJ family of programming languages for instance bases on this option using equations for specification and rewriting to run them. Algebraic specification[3] was an important subject of research in CS around 1980 and almost a synonym for abstract data types at that time. It has a mathematical foundation in Universal algebra.[4] The specification language can be made more expressive by allowing other formulas than only equations.

Типичным примером является иерархия типов данных list , bag и set . Все эти типы данных могут быть объявлены с помощью трех операций: null , который создает пустой контейнер, single , который создает контейнер из одного элемента, и append , который объединяет два контейнера одного типа. Полная спецификация для трех типов данных может быть затем дана с помощью следующих правил для этой операции:

Access to the data can be specified likely, e.g. a member function for these containers by:

Other types[edit]

Types can be based on, or derived from, the basic types explained above. In some languages, such as C, functions have a type derived from the type of their return value.

Pointers and references[edit]

The main non-composite, derived type is the pointer, a data type whose value refers directly to (or "points to") another value stored elsewhere in the computer memory using its address. It is a primitive kind of reference. (In everyday terms, a page number in a book could be considered a piece of data that refers to another one). Pointers are often stored in a format similar to an integer; however, attempting to dereference or "look up" a pointer whose value was never a valid memory address would cause a program to crash. To ameliorate this potential problem, pointers are considered a separate type to the type of data they point to, even if the underlying representation is the same.

Function types[edit]

While functions can be assigned a type, too, their type is not considered a data type in the setting of this article. Here, data is viewed as opposed to algorithms. In programming, functions are strongly related to the latter. But because a central motive of universal data processing is, that algorithms can be represented as data, e.g. textual description and binary programs, the contrast of data and functions has its limits. Reversely, functions can be used to encode data, too. Many contemporary type systems strongly focus on function types and many modern languages construe functions as first-class citizens.

To conceptually exclude functions from the subject is not uncommon in related fields. Predicate logic for instance does not allow to apply the quantifiers on function nor predicate names.

Meta types[edit]

Some programming languages represent the type information as data, enabling type introspection and reflection. To the contrary, higher order type systems, while allowing to construct types from other types and pass them through functions like they were values, typically avoid basing computational decisions on them.

Utility types[edit]

For convenience, high-level languages may supply ready-made "real world" data types, for instance times, dates and monetary values and memory, even where the language allows them to be built from primitive types.

Type systems[edit]

A type system associates types with computed values. By examining the flow of these values, a type system attempts to prove that no type errors can occur. The type system in question determines what constitutes a type error, but a type system generally seeks to guarantee that operations expecting a certain kind of value are not used with values for which that operation does not make sense.

A compiler may use the static type of a value to optimize the storage it needs and the choice of algorithms for operations on the value. In many C compilers the float data type, for example, is represented in 32 bits, in accord with the IEEE specification for single-precision floating point numbers. They will thus use floating-point-specific microprocessor operations on those values (floating-point addition, multiplication, etc.).

The depth of type constraints and the manner of their evaluation affect the typing of the language. A programming language may further associate an operation with varying concrete algorithms on each type in the case of type polymorphism. Type theory is the study of type systems, although the concrete type systems of programming languages originate from practical issues of computer architecture, compiler implementation, and language design.

Type systems may be variously static or dynamic, strong or weak typing, and so forth.

See also[edit]

  • C data types
  • Data dictionary
  • Functional programming
  • Kind
  • Type theory for the mathematical models of types
  • Type system for different choices in programming language typing
  • Type conversion

References[edit]

  1. ^ type at the Free On-line Dictionary of Computing
  2. ^ Shaffer, C. A. (2011). Data Structures & Algorithm Analysis in C++ (3rd ed.). Mineola, NY: Dover. 1.2. ISBN 978-0-486-48582-9.
  3. ^ Ehrig, H. (1985). Fundamentals of Algebraic Specification 1 - Equations and Initial Semantics. Springer-Verlag. ISBN 0-387-13718-1.
  4. ^ Wechler, Wolfgang (1992). Universal Algebra for Computer Scientists. Springer-Verlag. ISBN 0-387-54280-9.

Further reading[edit]

  • Parnas, David L.; Shore, John E.; Weiss, David (1976). "Abstract types defined as classes of variables". Proceedings of the 1976 Conference on Data : Abstraction, Definition and Structure: 149–154. doi:10.1145/800237.807133. S2CID 14448258.
  • Cardelli, Luca; Wegner, Peter (December 1985). "On Understanding Types, Data Abstraction, and Polymorphism" (PDF). ACM Computing Surveys. 17 (4): 471–523. CiteSeerX 10.1.1.117.695. doi:10.1145/6041.6042. ISSN 0360-0300. S2CID 2921816.
  • Cleaveland, J. Craig (1986). An Introduction to Data Types. Addison-Wesley. ISBN 978-0201119404.

External links[edit]

  • Media related to Data types at Wikimedia Commons