Урок 2. Функции и структуры

Функции

Функция объявляется словом функция. Тип результата пишется после двоеточия, а вернуть возвращает значение. Если вернуть нечего, всё равно используйте : целое и вернуть 0;, как в главной:

функция площадь(целое ширина, целое высота): целое
    вернуть ширина * высота;
конец

функция факториал(целое n): целое
    если (n не больше 1)
        вернуть 1;
    конец
    вернуть n * факториал(n - 1);
конец

функция поприветствовать(текст имя): целое
    вывести("Привет, %имя%!");
    вернуть 0;
конец

функция главная(): целое
    вывести("Площадь: %(площадь(6, 7))%");
    вывести("5! = %(факториал(5))%");
    поприветствовать("Сфера");
    вернуть 0;
конец
Площадь: 42
5! = 120
Привет, Сфера!

Функция может вызывать сама себя (рекурсия) — так считается факториал. Компилятор проверяет число и типы аргументов при каждом вызове.

Структуры

Структура собирает поля и методы в один тип. Метод — это обычная функция внутри структуры, а это — ссылка на текущий объект. Конструктор создаётся автоматически и принимает все поля в порядке объявления:

структура Прямоугольник
    целое ширина;
    целое высота;

    функция площадь(): целое
        вернуть это.ширина * это.высота;
    конец

    функция описание(): текст
        вернуть "прямоугольник " + целое_в_текст(это.ширина) + "x" + целое_в_текст(это.высота);
    конец
конец

функция главная(): целое
    Прямоугольник р = Прямоугольник(4, 5);
    вывести(р.описание());
    вывести("площадь: %(р.площадь())%");
    р.ширина = 10;
    вывести("после изменения: %(р.площадь())%");
    вернуть 0;
конец
прямоугольник 4x5
площадь: 20
после изменения: 50

Структуры всегда живут в куче и передаются по ссылке: если передать р в функцию и изменить поле там, оно изменится и у вызывающего. Память освобождается автоматически — по счётчику ссылок.

Что запомнить

  • функция имя(тип а, тип б): тип — тип результата после двоеточия.
  • Поля структуры не имеют значений по умолчанию, их задаёт конструктор: Прямоугольник(4, 5).
  • Методы обращаются к полям через это.поле.

Упражнения

  1. Напишите функцию максимум(а, б, в), возвращающую наибольшее из трёх чисел.
  2. Сделайте структуру Счёт с полем баланс и методами пополнить(целое сумма) и показать().
  3. Реализуйте рекурсивно числа Фибоначчи.

Дальше: Урок 3. Список, Словарь и текст.