doc: add book,internal,reference,builtins sections
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Функции и рекурсия
|
||||
|
||||
Функция объявляется ключевым словом `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)
|
||||
Reference in New Issue
Block a user