Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Нативные типы

Типы машинного уровня

Нативные типы имеют имена, записанные строчными буквами: int, num и str. Объявить переменную с одним из них можно точно так же, как с Int или Str:

my int $i = 42;
my num $n = 3.14e0;
say $i; # 42
say $n; # 3.14

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

Есть одна особенность поведения, о которой нужно знать сразу: нативная переменная никогда не может быть неопределённой. Если обычный контейнер Int начинает с неопределённого значения Any, то нативный int начинает с нуля:

say (my Int $a); # (Int)
say (my int $b); # 0

То же относится к нативным массивам, которые объявляются с указанием нативного типа перед переменной с @:

my int @numbers = 10, 20, 30;
say @numbers.sum; # 60

Такой массив хранит элементы как «сырые» машинные целые числа, а не как обёрнутые объекты Int, и поэтому использует меньше памяти. При интроспекции нативное значение автоматически упаковывается в соответствующий полный тип, поэтому (my int $b).WHAT выводит (Int).

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Нативные типы   |   Тест — Нативные типы


💪 Или перейдите сразу к упражнениям этого раздела.