Если вы уже пишете на Python, JavaScript, Java или Rust, сравните знакомые конструкции с Топазом. Различия помогут выбрать следующий урок без повторения основ программирования.
Прочитайте знакомый расчёт
Эта функция складывает длительность задач из массива.
record Задача {
название: string,
минуты: int
}
function всегоМинут(задачи: Array<Задача>) -> int {
let mut всего = 0
for задача in задачи {
всего = всего + задача.минуты
}
всего
}Для задач длительностью 10 и 25 минут функция всегоМинут вернёт 35. Этот фрагмент объявляет запись и функцию, но не вызывает её. Объявление let mut всего позволяет обновлять сумму в цикле. Последнее выражение всего задаёт возвращаемое значение.
Четыре различия
Для повторного присваивания нужен let mut. Имени, объявленному через let, нельзя присвоить новое значение. Используйте let mut для переменной, значение которой потребуется заменить.
Обрабатываемые ошибки возвращаются через Result. Обработайте возвращённую ошибку или передайте её вызывающему коду с помощью ?. В Топазе нет синтаксиса перехвата исключений. Ошибка времени выполнения останавливает программу, и обработать её как возвращённую ошибку нельзя.
Возможное отсутствие значения отражается в типе. Используйте Option<T>, если результат может отсутствовать. Для внешних данных, допускающих null, используйте T | null. Это разные типы, и перед использованием содержащегося значения нужно обработать его отсутствие.
Доступ к файлам зависит от среды выполнения. Профиль задаёт набор поддерживаемых функций и правил выполнения. Если код работает с файлами или другим вводом и выводом, проверьте импорты, настройки пакета и выбранный профиль. Типы входных данных и результата указаны в сигнатуре функции. В разделе Чтение реального файла показано, как читать эти части вместе.
Сопоставьте знакомые конструкции
| Знакомая конструкция | Форма в Топазе |
|---|---|
dict, Map или HashMap | Map хранит ключи и значения. См. Коллекции и включения. |
| Класс для объединения данных | record объединяет поля. Функции обрабатывают такие записи. |
| Интерфейс для обобщённого кода | Явные сигнатуры функций и статические протоколы описывают необходимые операции. У протоколов нет динамической диспетчеризации во время выполнения. |
Обработка ошибок через try/except | Верните Result и обработайте Ok или Err. |
| Поиск, который может ничего не найти | Верните Option<T> и обработайте Some или None. |
Внешние данные, допускающие null | Используйте T | null и обработайте null. |
Топаз не поддерживает наследование классов и рефлексию для изучения структуры программы во время выполнения. Нет и полиморфизма строк записей, который позволяет оставлять часть полей обобщённого типа записи неопределённой. Модель данных описана в разделе Записи и номинальные данные. Числовые типы не преобразуются неявно, поэтому int не становится автоматически float внутри выражения.
Попробуйте
Функция ищет задачу по названию в списке, который хранится в памяти. Какой тип результата подойдёт, если задача может не найтись?
Показать ответ
Используйте Option<Задача>. Верните Some(задача), если задача найдена, и None, если совпадений нет. Если сама операция может завершиться ошибкой, например при чтении файла, выразите эту ошибку через Result.
Выберите следующий урок
Начните с Первой программы, чтобы установить Топаз и запустить файл. Если вы уже это сделали, выберите нужную тему ниже.
- Значения и функции знакомит с типами, возвращаемыми значениями и повторным присваиванием.
- Данные и управление знакомит с записями, коллекциями и ветвлениями.
- Ошибки и ресурсы знакомит с
Option,Result,?иdefer.
Когда эти примеры станут понятны, объедините их в Первом приложении. Держите рядом Краткий обзор синтаксиса, чтобы искать нужные конструкции во время работы.