Картарский язык программирования — это строго типизированный язык. Это означает, что каждая переменная и выражение имеет свой тип, известный на этапе компиляции.
1 Простые типы данных
Простые типы данных делятся на беззнаковые целые, знаковые целые, числа с плавающей точкой, булевы выражения и перечисления.
1.1 Целые числа
Типы знаковых целых чисел:
- число8 — 8-ми битное знаковое целое число. Принимает целочисленные значения от -128 до 127 включительно.
- число16 — 16-ти битное знаковое целое число. Принимает целочисленные значения от -32768 до 32767 включительно.
- число32 — 32-ти битное знаковое целое число. Принимает целочисленные значения от -2147483648 до 2147483647 включительно.
- число64 — 64-ти битное знаковое целое число. Принимает целочисленные значения от -9223372036854775808 до 9223372036854775807 включительно.
- число — синоним для типа число32
Типы беззнаковых целых чисел:
- счётное8 — 8-ми битное беззнаковое целое число. Принимает целочисленные значения от 0 до 255 включительно.
- счётное16 — 16-ми битное беззнаковое целое число. Принимает целочисленные значения от 0 до 65535 включительно.
- счётное32 — 32-ми битное беззнаковое целое число. Принимает целочисленные значения от 0 до 4294967295 включительно.
- счётное64 — 64-ми битное беззнаковое целое число. Принимает целочисленные значения от 0 до 18446744073709551615 включительно.
- счётное — синоним для типа счётное32 (??? обсуждаемо).
1.2 Числа с плавающей запятой
Типы чисел с плавающей запятой:
- дробное32 — числа с плавающей точкой одинарной точности (single precision) согласно стандарту IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985 (IEEE, New York).
- дробное64 — числа с плавающей точкой двойной точности (double precision) согласно стандарту IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985 (IEEE, New York).
- дробное — синоним для типа дробное64
1.3 Булевый тип
Булевый тип:
- буль — булево число, принимающее два значения: «да» и «нет».
1.4 Перечисления
Перечисления:
- перечисление — тип определяемый пользователем. Принимает одно из перечисленных значений.
Пример объявления перечисления:
перечисление ДеньНедели:
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье
Пример использования:
поле ДеньЗаседания = ДеньНедели.Четверг
2 Ссылочные типы данных
2.1 Ссылка
Предназначен для хранения адреса памяти. Тип ссылка необходим для работы с библиотеками. Необходим для того, чтобы принимать ссылки из библиотек и передавать библиотекам. Ничего с ними делать нельзя, используются только для хранения значений. Возможно также для хранения хандлеров.
2.2 Строка
Экземпляр класса «строка» представляет набор символов Юникод. Строковый объект имеет константное (неизменяемое) значение. Строковые литералы ссылаются на экземпляры класса «строка».
2.3 Неопределенность
Неопределенность — это тип данных, который модифицирует другой тип данных. Тип неопределенность может принимать либо специальное значение пусто, либо значение класса.
поле Количество = целое?(пусто)
поле Цена = целое?(35)
Перевод из неопределенного типа в соответствующий ему определенный можно совершить с помощью вызова метода «или» или с помощью блока «раскрыть». Пример:
поле Количество = целое?(пусто)
Кар.Напечатать(Количество.или(-1))
раскрыть Количество как Кол:
Кар.Напечатать(Кол)
иначе:
Кар.Напечатать("Количество не определено")
2.4 Объединение
Объединение — это структура, которая может иметь один из возможных типов, в зависимости от связанного с ним перечисления. Для того, чтобы создать экземпляр объединения, необходимо создать тип перчесления, тип объединения, связанный, с типом перечисления, далее экземпляр перечисления, и экземпляр объединения, связанный с перечислением. Например:
перечисление ИмяПоля:
Имя
ГодРождения
Улица
Дом
объединение Поле(ИмяПоля):
ИмяПоля.Имя Имя = ""
ИмяПоля.ГодРождения Год = 1900
ИмяПоля.Улица Улица = ""
ИмяПоля.Дом Дом = 0
поле Наименование = ИмяПоля.Улица
поле Значение = Поле.Создать(Наименование)
2.5 Структура
Структура — это набор нескольких полей. В отличие от класса не могут иметь методов и все поля открыты. Фактически это просто обрезанный класс.
Пример:
структура Дата:
поле Год = 1900
поле Месяц = 1
поле День = 1
2.6 Массив
Массив является псевдошаблоном для хранения последовательности переменных одинакового типа.
Объявление:
поле ПростыеЧисла = массив!(число)(2, 3, 5, 7, 11, 13, 17, 19)
Использование:
раскрыть ПростыеЧисла.0 как ПростоеЧисло:
Кар.Напечатать(ПростоеЧисло)
Этот пример напечатает число 2.
Обратите внимание, что каждый элемент массива является типом неопределенность от элемента массива, который надо раскрыть.
Возможно будут вводиться статические и динамические массивы.
2.7 Дерево
Дерево является псевдошаблоном для хранения переменных одинакового типа в структуре дерево.
Обявление может быть внешнее или внутреннее.
При внешнем объявлении дерева элементы массива не знают о том, что они находятся в дереве и нет возможности из класса обращаться к предку или потомкам дерева:
поле Каталог = дерево!(строка)("")
Но может быть также внутренним. Для этого необходимо отнаследовать класс от дерева:
класс Каталог наследуется от дерево
внешнее поле Имя = ""
2.8 Граф
Граф является псевдошаблоном для хранения переменных в структуре типа граф. Можно хранить в структуре либо узлы, либо ребра, либо и то и другое. Графы могут быть однонаправленные и двунаправленные. Между двум узлами может быть одно ребро или множество.
Обявление может быть внешнее или внутреннее.
При внешнем объявлении графа элементы массива не знают о том, что они находятся в графе и нет возможности из класса обращаться к своим узлам соседям:
поле Каталог = граф!(строка)("") (???)
Но может быть также внутренним. Для этого необходимо отнаследовать класс от графа:
класс Каталог наследуется от дерево (???)
внешнее поле Имя = ""
2.9 Класс
Класс — это тип, содержащий поля и методы. Более подробное описание в главе «Классы».