Функції
Функції — ключова концепція Scheme: вони інкапсулюють логіку, дають змогу повторно використовувати код і структурувати скрипти. З їх допомогою можна створювати модульні, підтримувані скрипти — від базових операцій до складних робочих процесів у Lumi.
Цей розділ знайомить із функціями в Scheme і закладає основу для розуміння їхніх типів, визначень і використання. Наступні розділи детальніше розглянуть окремі типи функцій.
Мінімальний синтаксис і вирази
Код Scheme складається з виразів. Вираз обчислюється як значення. Синтаксис єдиний: дужки утворюють виклик, спочатку — ім’я оператора або функції.
(+ 1 2) ; Додає 1 і 2, результат — 3
(if #t 1 0) ; Обчислюється як 1, бо умова істинна
(list 1 2 3) ; Створює список: (1 2 3)Оскільки все є виразом, потік керування природно вписується в той самий стиль, що й виклики функцій.
Навіщо потрібні функції
Функції в Scheme важливі з кількох причин:
- Повторне використання коду: уникайте повторень, інкапсулюючи логіку в багаторазові компоненти.
- Модульність: розбивайте складні завдання на менші, керовані частини.
- Динамічна поведінка: приймайте параметри для різних вхідних даних або ситуацій.
- Вища абстракція: спрощуйте логіку, зосереджуючись на тому, «що» робить функція, а не «як».
Огляд типів функцій
Scheme пропонує різноманітні функціональні конструкції:
Іменовані функції Стандартні функції, визначені через
define. Вони — основа більшості скриптів.(define (square x) (* x x))Анонімні функції Також відомі як лямбда-функції — безіменні функції, визначені вбудовано для одноразового використання.
(lambda (x) (* x x))Функції вищого порядку Функції, які приймають інші функції як аргументи або повертають функції як результати — для відображення, фільтрації, згортання тощо.
(map (lambda (x) (* x x)) '(1 2 3 4)) ; Повертає (1 4 9 16)
Загальний синтаксис функцій
(define (function-name parameter1 parameter2 ...)
body-expression)function-name: назва функції.parameter1, parameter2, ...: аргументи функції.body-expression: логіка, яка виконується під час виклику.
Приклад:
(define (add x y)
(+ x y))
(add 3 5) ; Повертає 8Побічні ефекти та глобальний стан
У Lumi багато корисних процедур мають побічні ефекти: змінюють зображення, малюнок, записують файл або виводять результат.
- Ізолюйте побічні ефекти в невеликих, чітко названих процедурах.
- Уникайте зміни глобального контексту, якщо це не потрібно.
- Коли змінюєте контекст (кольори, пензлі тощо), обгорніть роботу в
lumi-context-pushіlumi-context-pop, щоб відновити стан користувача.