Files
fz-lang/docs/ru/book/04_functions-and-recursion.md
T

45 lines
1.7 KiB
Markdown

# Функции и рекурсия
Функция объявляется ключевым словом `fn`, именем, списком типизированных аргументов и, если функция возвращает значение, типом результата.
```
fn sum(uint a, uint b) uint
{
return a + b;
}
```
Если функция ничего не возвращает, тип после закрывающей скобки можно опустить.
Вызов записывается как `name(arg1, arg2)`, аргументы передаются в порядке объявления.
## Возврат
return завершает текущую функцию.
Возвращаемое выражение должно быть совместимо с объявленным типом.
Пустой return; используется в функции без результата.
Возврат вне функции — ошибка компиляции.
## Рекурсия
Функция может вызывать саму себя:
```
fn factorial(uint n) uint
{
if (n <= 1)
return 1;
return n * factorial(n - 1);
}
```
Каждый вызов получает собственное окружение.
ВМ хранит адрес возврата в стеке вызовов, а локальные значения — в стеке окружений.
При возврате объекта компилятор переносит его владение в родительское окружение.
---
Далее: [Классы и объекты](./05_classes-and-objects.md)
Назад: [Управление потоком](./03_control-flow.md)