Изучение Топаза

Значения и функции

Добавьте в планировщик вывод и аннотации типов, неизменяемые и изменяемые привязки, параметры и проверяемый результат функции.

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

Что нужно знать: завершите Первую программу и научитесь выполнять topaz check перед topaz run.

Расширьте рабочий файл

Создайте values-functions.tpz:

TOPAZ
function minutesLeft(total: int, spent: int) -> int {
    total - spent
}

let topic = "Topaz basics"
let total: int = 45
let spent = 20
let mut sessions = 0
sessions = sessions + 1

print("{topic}: {minutesLeft(total, spent)} minutes left")
print("sessions: {sessions}")

Проверьте и запустите продолжение:

BASH
topaz check values-functions.tpz
topaz run values-functions.tpz

Наблюдаемый результат:

Вывод
Topaz basics: 25 minutes left
sessions: 1

Читайте от результата к исходнику

Первая строка содержит результат minutesLeft(45, 20). Сигнатура называет два параметра int и обещает результат int. Последнее выражение total - spent становится этим результатом без явного return. Используйте return, когда важно показать досрочный выход; объявленный тип результата всё равно действует для каждого выхода.

Для topic и spent аннотации не нужны: тип очевиден из начального значения. Запись total: int делает границу явной. Все три имени неизменяемы — их значения можно читать, но нельзя заменить.

sessions устроен иначе. let mut сообщает о намеренном присваивании, а следующая строка меняет значение с 0 на 1. Изменяемость следует давать той привязке, которая действительно отслеживает состояние, а не всем значениям на случай будущих изменений.

Выбор: вывод, аннотация или изменяемость?

Для локального значения с очевидным типом предпочитайте обычный let и вывод типа. Добавляйте аннотацию, когда читателю важна граница. Добавляйте mut, только если последующее присваивание входит в модель. Сигнатуру функции указывайте явно, потому что вызывающий код полагается на контракт параметров и результата.

Попробуйте

Замените total на 60, а spent на 15, не меняя sessions. Как изменится вывод?

Показать ответ

Первая строка станет Topaz basics: 45 minutes left, а вторая останется sessions: 1. Функция получает новые аргументы, но отдельный изменяемый счётчик по-прежнему увеличивается один раз.

Готовы двигаться дальше, если

Вы можете объяснить выведенный тип, явную аннотацию, неизменяемую и изменяемую привязки, два параметра и выражение, которое становится результатом функции.

Точные формы описаны в разделах Типы и Функции и обобщения. Обобщения — последующий справочный материал, а не условие занятия. Переходите к Данным и управлению.