June 28, 2023

#5 Путь разработчика Leo

Привет! Продолжаем изучать язык программирования Leo в рамках серии "Путь разработчика". Если вы не читали предыдущие статьи, то рекомендую ознакомиться. Сегодня же мы говорим про функции и операторы в соответствии с нашим планом.

План на "Путь разработчика"

Если вам удобнее воспринимать информацию в видео-формате, то можете посмотреть видео-версию данной статьи по ссылке: ссылка

Структура программы

Программа Leo содержит объявления области действия программы, функций импорта, функций перехода, вспомогательных функций, структур, записей, отображений и функций завершения. Объявления доступны локально в программном файле.

Функция перехода.

Функции перехода в Leo объявлены как transition {name}() {}. Функции перехода можно вызывать непосредственно при запуске программы Leo (через leo run), именно это мы делали в третьей статье. Функции перехода содержат выражения и операторы, которые могут вычислять значения. Функции перехода должны быть в текущей области действия программы для вызова.

Входные данные

Входные данные функции объявляются как {visibility} {name}: {type}, Входные параметры функции должны быть объявлены сразу после объявления имени функции в круглых скобках. В функцию ниже поступает публичная переменна а типа field.

transition foo(public a: field) { }

Выход функции

Выход функции рассчитывается как return {expression};. Возврат вывода завершает выполнение функции. Тип возвращаемого объявления функции должен соответствовать типу возвращаемого {expression}.

transition foo(public a: field) -> field { return a + 1field; }

В данном примере в функцию поступила переменная a типа field, на выходе также указан тип field. Далее с помощью return мы возвращаем данную переменную, прибавив 1.

Таким образом функция перехода имеет следующий вид

program hello.aleo { transition foo(public a: field, b: field) -> field { return a + b; } }

Вспомогательные функции

Вспомогательная функция объявлена ​​как function {name}() {}. Вспомогательные функции содержат выражения и операторы, которые могут вычислять значения, однако вспомогательные функции не могут создавать файлы records.

Вспомогательные функции нельзя вызывать напрямую извне. Вместо этого они должны вызываться другими функциями. Входные данные вспомогательных функций не могут иметь {visibility}модификаторов, таких как функции перехода, поскольку они используются только внутри, а не как часть внешнего интерфейса программы. Такую форму может иметь вспомогательная функция:

function foo(a: field, b: field) -> field { return a + b; }

Функция финализации

Функция finalize объявлена ​​как finalize {name}:. Функция finalize должна следовать сразу за функцией перехода и иметь то же имя; он связан с функцией перехода и выполняется в цепочке после проверки доказательства выполнения соответствующего перехода с нулевым разглашением; функция finalize завершает функцию перехода в цепочке. В случае успеха функции finalize выполняется логика программы. При сбое функции финализации логика программы возвращается.

Операторы

Перейдем к операторам. В Leo они достаточно разнообрны. Например, сложение можно выполнить тремя способами

let a: u8 = 1u8 + 1u8; // a равно 2

a += 1u8; // a равно 3

a = a.add(1u8); // a равно 4

Весь список операторов, а также информация по функциям представлена на сайте Aleo в данной статье: https://developer.aleo.org/leo/language

Кстати, оператор остаток (%) мы использовали в прошлом видео.

Практика

Давайте создадим программу, которая будет выводить наибольшее число из поступающих в неё. Создав эту программу, я покажу вам принцип работы реляционных операторов, а логические мы будем практиковать в следующей статье.

transition main(public a: u32, b: u32) -> u32 {

        if a >= b {

            return a;

       } else {

            return b;

        }

    }

Рассмотрим данный код. В функцию перехода поступают 2 переменных, далее с помощью логической стуктуру if-else мы определяем большее число. Если a больше или равно b, тогда возвращаем а иначе возвращаем b.

Входные данные сделаем следующие

[main]public

a: u32 = 5u32;

b: u32 = 2u32;

Таким образом, большее число 5 и мы должны получить его по результату работы программы. Давайте запустим её.

Всё правильно, на выходе мы получили 5. На это всё, увидимся в следующей статье!

Полезные материалы

Плейлист с видео из серии "Путь разработчика": ссылка

Статья Aleo по переменным, функциям и операторам: https://developer.aleo.org/leo/language