Как и большинство стандартных языков программирования, Kit имеет множество различных типов, и они обозначаются заглавной буквой.
В Kit поддерживаются числовые типы стандарта c99 и стиля stdint.h
, как показано на kitlang.org:
Числовые типы включают в себя:
- Целые числа со знаком:
Int8
,Int16
(Short
),Int32
иInt64
(Long
) - Целые числа без знака:
Uint8
(Byte
),Uint16
,Uint32
,Uint64
- Числа с плавающей запятой:
Float32
(Float
),Float64
(Double
) Char
, что соответствуетchar
CInt
, что соответствуетint
языка C (может варьироваться в зависимости от платформы)Size
, соответствующийsize_t
языка C, представляющий значение размером с указатель
Логический тип - это то, что вы ожидаете, с истинным или ложным. Чтобы соответствовать C, Kit поддерживает строки C с завершающим нулем, используя тип CString
.
В предыдущем уроке мы рассмотрели пример:
function main(){ printf("%s", "Hello World!"); }
Что-то, что может показаться знакомым, — это функция, которую мы используем для вывода на консоль, это типичный способ вывода в c! Это демонстрирует истинную силу Kits в работе непосредственно с c, мы передаем функции форматирование, а затем литерал CString.
Прежде чем мы перейдем к более сложным типам, давайте рассмотрим создание переменных в Kit.
var smallInt : Int8 = 1; const constantSmallishInt : Int16 = 1;
Если вы когда-либо использовали TypeScript, вы знакомы с этим типом форматирования. Используя либо var
, либо const
, последнее для неизменяющихся постоянных значений, мы затем следуем за ним по имени нашей переменной, затем :
завершается типом нашей переменной. Следует отметить, что Kit поддерживает объявления со свободной типизацией, позволяя компилятору определить тип, что означает, что вы можете:
//compiler can infer the type var mynumber = 1; var myfloat = 1.0; var mybool = true; var mycstring = "Hello World!"; //explict type suffix is supported var mynumber = 1_u64; //UInt64
Этот тип объявления переменных может потребовать некоторой адаптации, если вы работаете с C/C++ или Java.
Массивы в Kit объявляются немного иначе, чем в большинстве языков.
var myNumArray : CArray[Int, 3];
Kit компилируется в C, поэтому примитивный массив в Kit имеет тип CArray. Мы следуем этому, объявляя тип массива, а затем длину массива. Значения могут быть объявлены при создании или после, или обнулены с помощью пустого ключевого слова.
var myNumArray : CArray[Int, 3] = [1, 2, 3]; //set array var myNumArray : CArray[Int, 3] = empty; special empty character
Позже мы рассмотрим случай, когда пустое значение не требуется, при выделении массива в куче, поскольку до этого момента все созданные переменные размещались в стеке. Это важно иметь в виду, поскольку Kit не является языком с управляемой памятью, это то, что вы должны явно делать самостоятельно.
Указатели в комплекте используются с типом Ptr[T]
type. T — это универсальный тип, то есть он будет заменен типом переменной. Концепция универсальных шаблонов выходит за рамки этого руководства и будет рассмотрена позже.
var myInt : Int = 1; //here we create an int var myIntPointer : Ptr[Int] = &myInt; //using the address of operator to assign pointer value var myNewInt : Int = *y; //assigning the value of our pointer to an int
Вы заметите поведение типа C при назначении указателя в приведенном выше примере кода. Мы используем тот же оператор &
, чтобы получить адрес памяти переменной, а затем разыменовываем его с помощью оператора *
. Однако в Kit это всегданеобходимо, вы можете поручить Kit обрабатывать ссылки и разыменования за вас.
var myInt : Int = 1; var myIntPointer : Ptr[Int] = myInt; var myNewInt : Int = myIntPointer;
Это хорошо работает и при доступе к значениям из указателей, вы не используете ->
для доступа к значению из указателя, вместо этого вы просто используете .
.
Кортежи в наборе являются контейнерами для нескольких типов и полезны, когда вам может потребоваться вернуть несколько значений из функции.
var myTuple : (Int, Float, CString) = (1, 2, "Hello!");
Кортежи обычно встречаются в языках более высокого уровня, таких как C# и Python, поэтому интересно иметь возможность использовать их в языке, который «ближе к металлу».