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

В Kit поддерживаются числовые типы стандарта c99 и стиля stdint.h, как показано на kitlang.org:

Числовые типы включают в себя:

  • Целые числа со знаком: Int8, Int16 (Short), Int32 и Int64 (Long)
  • Целые числа без знака: Uint8 (Byte), Uint16, Uint32, Uint64
  • Числа с плавающей запятой: Float32 (Float), Float64 (Double)
  • Char, что соответствует char C
  • Int, что соответствует 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, поэтому интересно иметь возможность использовать их в языке, который «ближе к металлу».