Типы данных в языке Перфолента

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

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

Каждый язык программирования манипулирует пользовательскими данными. Обработка данных это единственное, что может делать компьютер. Даже когда компьютер управляет каким-нибудь физическим устройством, технически, он просто отправляет в устройство необходимые данные. Но в каком виде эти данные представлены? Исторически так сложилось, что почти все современные компьютеры построены на двоичной логике и основным типом данных являются числа в двоичной системе исчисления, состоящие из нулей и единиц. Вот только для людей такие данные абсолютно не удобны. Люди привыкли использовать числа в десятичной системе, а также, даты, тексты, состоящие из букв-символов, звуки, изображения, видео и так далее. Нет сомнений, что любые данные могут быть представлены в разнообразных символьных формах. Хотите иероглифами запишем, а хотите последовательностью нулей и единиц. Но все же люди должны эти символьные системы понимать и использовать привычно и легко. Вот поэтому почти все языки программирования предоставляют программисту наиболее распространенные среди людей типы данных десятичные числа, строки, даты и т.д.

Типы данных в языке Перфолента

Содержание

Типы данных в языке Перфолента

Типы данных очень важная часть языка. От этого зависит удобство его использования и эффективность выполнения написанных на нем программ.

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

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

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

В языке Перфолента можно выделить несколько классификаций типов данных:

1) Простые и составные.

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

2) Встроенные, пользовательские и внешние.

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

3) Структурные и ссылочные.

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

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

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

Встроенные типы данных

Встроенные типы данных языка Перфолента с описанием и указанием аналогов типов данных платформы .Net Framework представлены в таблице 2. Целые числовые типы делятся на знаковые и без знаковые. Без знаковые целые числа в языке Перфолента называются «битовыми», т.к. необходимость в них возникает в основном при «побитовых» (в другой терминологии «поразрядных») операциях, а также при хранении двоичной информации. Тип Цел это целые числа со знаком, а тип Бит это целые числа без знака для побитовых операций. Число после Цел или Бит указывает на количество разрядов в двоичном представлении числа. Типы Целое и Байт введены в язык как синонимы типов Цел32 и Бит8 соответственно, т.к. Цел32 наиболее употребительный из типов целых чисел, а Байт является общепринятым наименованием 8-ми битного двоичного числа.

Таблица 1

Язык Перфолента Аналог .Net Framework Размер в байтах Описание
Символ (с) Char 2 Число без знака. От 0 до 65535. Представляет один текстовый символ в кодировке Unicode
Число (ч) Decimal 16

Число со знаком, масштабируемое с переменной степенью 10. Коэффициент масштабирования указывает число цифр справа от десятичной запятой; его диапазон составляет от 0 до 28. При масштабе 0 (без дробных разрядов) самое крупное значение равно +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). С 28 десятичными знаками наибольшее значение равно +/-7,9228162514264337593543950335, а наименьшее ненулевое значение +/-0,0000000000000000000000000001 (+/-1E-28)

Вещ (в) Single 4 Вещественное число со знаком. 32-разрядное число формата IEEE одинарной точности с плавающей запятой, которое может изменяться в диапазоне от -3,4028235E+38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до 3,4028235E+38 для положительных. Числа одинарной точности сохраняют приближенные значения действительных чисел
ДВещ (д) Double 8 Вещественное число со знаком, двойной точности. 64-разрядное число формата IEEE двойной точности с плавающей запятой, которые изменяются в диапазоне от -1,79769313486231570E+308 до -4,94065645841246544E-324 для отрицательных значений и от 4,94065645841246544E-324 до 1,79769313486231570E+308 для положительных. Числа двойной точности сохраняют приближенные значения действительных чисел
Цел8 (ц8) SByte 1 Целое число со знаком. От –128 до 127
Цел16 (ц16) Int16 2 Целое число со знаком. От –32 768 до 32 767
Целое (ц32) Int32 4 Целое число со знаком. От –2 147 483 648 до 2 147 483 647. Синоним Цел32
Цел32 (ц32) Int32 4 Целое число со знаком. От –2 147 483 648 до 2 147 483 647
Цел64 (ц64) Int64 8 Целое число со знаком. От –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
Байт (б8) Byte 1 Целое число без знака. От 0 до 255. Синоним Бит8
Бит8 (б8) Byte 1 Целое число без знака. От 0 до 255
Бит16 (б16) UInt16 2 Целое число без знака. От 0 до 65 535.
Бит32 (б32) UInt32 4 Целое число без знака. От 0 до 4 294 967 295.
Бит64 (б64) UInt64 8 Целое число без знака. От 0 до 18 446 744 073 709 551 615
ЦелУкз IntPtr 4 или 8 Целое число со знаком. Размер Цел32 или Цел64 в зависимости от разрядности операционной системы. Определяемый платформой тип, который используется для представления указателя или дескриптора. CLS-совместим.
БитУкз UIntPtr 4 или 8 Целое число без знака. Размер Бит32 или Бит64 в зависимости от разрядности операционной системы. Определяемый платформой тип, который используется для представления указателя или дескриптора. CLS - не совместим
Объект Object 4 или 8 Простой, встроенный, ссылочный. Корневой тип, от которого наследуются все другие типы данных. В переменной типа Объект может храниться значение любого типа
Тип Type 4 или 8 Простой, встроенный, ссылочный. Представляет любой тип данных, но не сами данные
Дата DateTime 8 Простой, встроенный, структурный. Представляет дату и время от 1 января 100 года нашей эры до 31 декабря 9999 года, с точностью до миллисекунды
Булево Boolean Зависит от платформы Простой, встроенный, структурный. Содержит значение Истина или Ложь. Можно использовать синонимы True, False, Да, Нет, Правда
Строка String Зависит от платформы Составной, встроенный, ссылочный. Предназначен для хранения строк текстовых символов различной длины
Ошибка Exception - Представляет ошибку, произошедшую во время выполнения и перехваченную оператором Попытка

Литералы встроенных типов данных

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

Литерал типа Строка

Существует 4 вида литералов для задания строк.

Однострочная строка символов в двойных кавычках.

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

Многострочная строка символов в двойных кавычках с символами начала новой строки.

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

Между строками такого литерала можно вставлять комментарии.

Пример:

Текст = "Первая строка текста
            |Вторая ""строка"" текста
             //комментарий между строками текста
            |Третья строка текста"

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

Многострочная строка, состоящая из нескольких фрагментов

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

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

Пример:

Текст = "Первая строка текста" //комментарий после фрагмента
"Вторая ""строка"" текста"
//комментарий между строками текста
"Третья строка текста"  "Четвертая строка текста" //между этими фрагментами тоже будет вставлен перенос строки

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

Многострочная строка символов в двойных кавычках, начинающаяся и заканчивающаяся символом @

Все символы идущие после начальных символов @" и до конечных символов "@ являются символами, входящими в строку, в том числе все пробельные символы и переносы строки. Двойные кавычки находящиеся внутри такой строки дублировать не надо, что удобно, например, при составлении кода HTML или XML.

Пример:

Текст = @"Первая строка текста //а это не комментарий, а часть строки
Вторая "строка" текста, в которой мы не дублировали "двойные" кавычки
// это не комментарий, а третья строка текста
Четвертая строка текста"@

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

В том случае, когда внутри строки встречается комбинация "@, являющаяся признаком конца строки, символ @ необходимо продублировать, например,

Текст = @"Встретились символы конца строки "@@, но не сработали"@

Литерал типа Дата

В языке Перфолента текстовое представление даты задается в одинарных кавычках. Существует два вида литералов для представления даты. Рекомендуется использовать канонический вид.

Канонический вид литерала типа Дата.

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

Примеры:

'2018' – 1 января 2018 г. 0 часов 0 минут 0 секунд 0 миллисекунд;
'201803' – 1 марта 2018 г. 0 часов 0 минут 0 секунд 0 миллисекунд;
'20180509' – 9 мая 2018 г. 0 часов 0 минут 0 секунд 0 миллисекунд;
'20180131120101001' – 31 января 2018 г. 12 часов 1 минута 1 секунда 1 миллисекунда;

Системный вид литерала типа Дата

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

Примеры:

'22.02.2018' – 22 февраля 2018 г. 0 часов 0 минут 0 секунд 0 миллисекунд;
'22 февраля 2010 г.'  – 22 февраля 2018 г. 0 часов 0 минут 0 секунд 0 миллисекунд;
'31.01.2018 12:01:01.003' – 31 января 2018 г. 12 часов 1 минута 1 секунда 3 миллисекунды;
'05/11/2069 04:55:11.777' – 5 ноября 2069 г. 4 часа 55 минут 11 секунд 777 миллисекунд;

Литерал типа Булево

Задается одним из ключевых слов Истина, Ложь, включая синонимы Правда, Да, Нет, True, False.

Литералы числовых типов в десятичной системе счисления

Числовые литералы в десятичной системе счисления задаются при помощи цифр 0-9, десятичной точки, знака минус для отрицательных значений и символа Е за которым следует порядок, для чисел с плавающей запятой. По формату литерала компилятор определяет его тип. При этом используются следующие правила:

  • Числовые значения без дробной части представляются как тип Целое (Цел32), пример 21
  • Числовые значения без дробной части, слишком большие для Цел32, представляются как тип Цел64, пример 4294967296
  • Числовые значения без дробной части, слишком большие для Цел64, представляются как тип Число, пример 18446744073709551616
  • Числовые, с дробной частью, не имеющие символа порядка Е, имеющие более 15 значащих цифр, представляются как тип Число, пример 18446744073.709551616
  • Числовые, с дробной частью или символом порядка Е, имеющие до 7 значащих цифр, представляются как тип Вещ, пример 2.1
  • Числовые, с дробной частью или символом порядка Е, слишком большие для Вещ, представляются как тип ДВещ, пример 3.4E+40

Литералы числовых типов в шестнадцатеричной, восьмеричной и двоичной системах счисления

При обработке данных представленных последовательностью байтов удобно задавать числовые константы в шестнадцатеричной и двоичной системах счисления. Восьмеричная система применяется редко, т.к. удобна она лишь тогда, когда число разрядов в двоичном числе кратно трём, а в современных компьютерах устоялся формат двоичных чисел кратных восьми разрядам (8, 16, 32, 64). В языке Перфолента поддерживается два типа литералов для «HOB чисел», в формате, принятом в Visual Basic и в формате, принятом в Си-подобных языках, в том числе в 1С.

Компилятор по умолчанию выбирает наименьший без знаковый (битовый) числовой тип в который может поместиться задаваемое литералом число.

Литерал числового типа в шестнадцатеричной системе счисления

Литерал числового типа в шестнадцатеричной системе счисления начинается с символов &H или 0x за которыми следуют одна или более цифр 0-9 или букв A, B, C, D, E, F.

Примеры:

&H1, &HFF, &H7EEEABCD, 0x1, 0xFF, 0x7EEEABCD.

Литерал числового типа в восьмеричной системе счисления

Литерал числового типа в восьмеричной системе счисления начинается с символов &O или 0o за которыми следуют одна или более цифр 0-7.

Примеры:

&O1, &O77, &O76543210, 0o1, 0o77, 0o76543210

Литерал числового типа в двоичной системе счисления

Литерал числового типа в двоичной системе счисления начинается с символов &B или 0b за которыми следуют одна или более цифр 0-1.

Примеры:

&B1, &B1010, &B11110000, 0b1, 0b1010, 0b11110000

Символы типа для литералов числовых типов

Символы типа могут применяться для литералов числовых типов в любой из четырех поддерживаемых систем счисления. Если вы видите, что по правилам интерпретации числовых литералов для текущего литерала будет сформирован не тот тип, который вам необходим, то можно использовать символы типа, которые добавляются в конец литерала. Например, 0xFF будет интерпретирован как тип Байт, для интерпретации как тип Целое напишите 0xFFц. Литерал 1.2 будет интерпретирован как тип Вещ, для интерпретации как тип ДВещ напишите 1.2д.

Символы типа литерала для встроенных числовых типов указаны в скобках после имени типа в таблице 2, а также в следующем списке:

  • С – тип Символ;
  • Ч – тип Число;
  • Ц – тип Цел;
  • Б – тип Бит;
  • В – тип Вещ;
  • Д – тип ДВещ;

Типы литералов Ц и Б могут быть дополнены числом 8, 16, 32, 64, указывающим разрядность типа данных. Если разрядность после Ц или Б не указана, то компилятор выберет автоматически 32 или 64 разряда, в зависимости от размера числа.

Если символ типа литерала не указан, то компилятор выберет тип в зависимости от длины и написания с учетом наличия директивы препроцессора «ТипЧислаПоУмолчанию».

Примеры:

347ч – тип Число, значение 347;
0b1110ч – тип Число, значение 14;
"А"с – тип Символ, значение соответствует букве А;
-200ц8 – тип Цел8, значение -200;
-65000ц16 – тип Цел16, значение -65000;
3ц – тип Целое (Цел32), значение 3;
55ц32 – тип Целое (Цел32), значение 55;
37ц64 – тип Цел64, значение 37;
200б8 – тип Байт (Бит8), значение 200;
&HFFб16 – тип Бит16, значение 255;
200Б16 – тип Бит16, значение 200;
7б – тип Бит32, значение 7;
90б32 – тип Бит32, значение 90;
51Б64 – тип Бит64, значение 51;
4в – тип Вещ, значение 4;
89д – тип ДВещ, значение 89;

Cм. также

'Показать Содержание Описание языка Перфолента.NET'

Ссылки