February 11, 2024

Обновления #2. Массивы и кортежи в Leo

Привет! Leo - это язык программирования для создания частных приложений, он создан командой проекта Aleo и на этом канале я рассказываю про все обновления и новости данного проекта. Сегодня мы говорим про массивы и про кортежи.

Перед началом работы с новыми функциями требуется обновить Leo до самой актуальной версии. Для этого нужно открыть git bash и ввести

leo update

Теперь переходим в документацию на сайте aleo.org. Нас интересует вкладка build - aleo docs.

Здесь переходим в раздел language и ищем часть про array (массив). И видим следующую информацию:

Leo supports static arrays. Arrays are declared as [type; length] and can be nested. Arrays cannot be empty nor modified. Arrays only support constant accesses (the index must be a constant value). The accessor value must be a constant integer. Arrays can contain primitive data types, structs, or arrays. Structs and records can also contain arrays. Arrays can be iterated over using a for loop.
Leo поддерживает статические массивы. Массивы объявляются как [тип; длина] и могут быть вложенными. Массивы не могут быть пустыми или измененными. Массивы поддерживают только константный доступ (индекс должен быть константным значением). Значение аксессора должно быть постоянным целым числом. Массивы могут содержать примитивные типы данных, структуры или массивы. Структуры и записи также могут содержать массивы. Массивы можно итерировать с помощью цикла for.

Далее идет описание того, как мы можем использовать массивы в коде:

// Initalize a boolean array of length 4
let arr: [bool; 4] = [true, false, true, false];
// Nested Array
let nested: [[bool; 2]; 2] = [[true, false], [true, false]];
// Array of Structs
struct bar {
 data: u8,
}

Давайте протестируем и добавим в код программы простую инициализацию массива (первый пример). Для этого создаем новую программу через git bash:

leo new array

Теперь открываем директорию в sublime text, путь к программе вы видите на скриншоте выше. Откроем эти 2 файла.

Переходим в файл main.leo и добавляем инициализацию массива.

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

Теперь исполняем нашу программу:

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

Кортежи

Leo supports tuples. Tuples are declared as (type1, type2, ...) and can be nested. Tuples cannot be empty nor modified. Tuples only support constant access with a dot . and a constant integer. Tuples can contain primitive data types, structs, or arrays. Structs and records can also contain tuples.
Leo поддерживает кортежи. Кортежи объявляются как (type1, type2, ...) и могут быть вложенными. Кортежи не могут быть пустыми или модифицированными. Кортежи поддерживают только константный доступ с точкой . и константное целое число. Кортежи могут содержать примитивные типы данных, структуры или массивы. Структуры и записи также могут содержать кортежи.

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

let a: (u8, u8) = (foo, bar);

Чтобы получить значение элемента кортежа мы вводим код по форме:

название_кортежа.номер_элемента

При этом напоминаю, что кортежи нумеруются с 0. То есть чтобы записать в новую переменную первый элемент кортежа мы напишем:

let v: u8 = a.0;

Кортежи неизменямые, поэтому создать кортеж и изменить его мы не можем:

Давайте, например, создадим новый кортеж, который принимает удвоенное значение элементов предыдущего кортежа cor.

Для этого мы создаем новый кортеж cor2 . И он принимает по очереди все элементы массива, при этом они сразу умножаются на два.

При исполнении программы мы получаем следующий результат:

То есть всё работает корректно. На этом всё! Надеюсь, данная статья была для вас полезно, в дальнешйем я буду продолжать рассказывать вам о всех новшествах языка программирования Leo и самого проекта Aleo.