#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
Весь список операторов, а также информация по функциям представлена на сайте Aleo в данной статье: https://developer.aleo.org/leo/language
Кстати, оператор остаток (%) мы использовали в прошлом видео.
Практика
Давайте создадим программу, которая будет выводить наибольшее число из поступающих в неё. Создав эту программу, я покажу вам принцип работы реляционных операторов, а логические мы будем практиковать в следующей статье.
transition main(public a: u32, b: u32) -> u32 {
Рассмотрим данный код. В функцию перехода поступают 2 переменных, далее с помощью логической стуктуру if-else мы определяем большее число. Если a
больше или равно b
, тогда возвращаем а
иначе возвращаем b
.
Входные данные сделаем следующие
Таким образом, большее число 5 и мы должны получить его по результату работы программы. Давайте запустим её.
Всё правильно, на выходе мы получили 5. На это всё, увидимся в следующей статье!
Полезные материалы
Плейлист с видео из серии "Путь разработчика": ссылка
Статья Aleo по переменным, функциям и операторам: https://developer.aleo.org/leo/language