Результат: вы свяжете наблюдаемые значения с проверяемыми типами и дадите повторяющемуся вычислению имя функции.
Что нужно знать: завершите Первую программу и научитесь выполнять topaz check перед topaz run.
Расширьте рабочий файл
Создайте values-functions.tpz:
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}")Проверьте и запустите продолжение:
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. Функция получает новые аргументы, но отдельный изменяемый счётчик по-прежнему увеличивается один раз.
Готовы двигаться дальше, если
Вы можете объяснить выведенный тип, явную аннотацию, неизменяемую и изменяемую привязки, два параметра и выражение, которое становится результатом функции.
Точные формы описаны в разделах Типы и Функции и обобщения. Обобщения — последующий справочный материал, а не условие занятия. Переходите к Данным и управлению.