Структура программы

Запрещённые и отложенные формы

Замените привычную, но неподдерживаемую запись канонической формой текущего Топаза.

Эта страница описывает Топаз v5.17. Прежде чем считать её актуальной, сверьте поле version в /version.json со значением 5.17.

Обратитесь сюда, если topaz check отклоняет синтаксис, знакомый по JavaScript, Python, Rust или раннему проекту Топаза. Знакомая запись не становится вторым диалектом. Обычно у неё есть прямая текущая замена; если замены нет, возможность недоступна, а не поддерживается частично.

Проверьте программу в текущей записи

Сохраните код в forbidden-deferred.tpz:

TOPAZ
let mut количество = 0
let значения: Array<int> = [1, 2]
let преобразовать: (int) -> int = значение => значение + 1

match значения {
    case [голова, ..хвост] => {
        количество = преобразовать(голова) + хвост.length
    }
    case [] => {
        количество = 0
    }
}

print("{количество}")

Проверьте и запустите файл:

BASH
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz

Результат:

Вывод
3

Здесь показаны текущий порядок let mut, именованный тип коллекции, тип вызываемого значения, лямбда и шаблон остатка списка.

Замените запись, сохранив смысл

Если вы написалиИспользуйте
mut let count = 0let mut count = 0
count++ или count--count = count + 1 или count = count - 1
[T] в позиции типаArray<T>
function(T) -> U в позиции типа(T) -> U
args: ...T...args: T
[head, ...tail][head, ..tail]
Анонимную function (...) { ... }Лямбду, например value => value + 1
Обратные кавычки или ${value}Двойные кавычки и интерполяцию {value}
Индекс или .length у строкиtext.scalars(), затем операции Array
async или awaitЯвный ограниченный concurrent, если подходит его модель

Для модулей действуют отдельные зафиксированные формы. Используйте выборочный import и export перед объявлением из раздела Модули и видимость. Формы use, строковые и шаблонные пути, списки export, wildcard-export, повторный export и переименование при export недоступны.

Ошибочные записи выше показаны как текст, а не как действительные примеры Топаза. Запускайте topaz check до выбора генерации: общая проверка отклонит их на границе языка, и целевой код не будет угадывать смысл.

Отложенное не означает обещанное

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

Сейчас недоступны, среди прочего, кластеры графем и прямые срезы строк, HTML- и пользовательские теги шаблонов, более широкие и высокоранговые ограничения обобщений, рекурсивные псевдонимы типов, широкий вызов протоколов, повторный экспорт пакетов, общее разворачивание итерируемых значений, асинхронная очистка, async/await, перехват ошибок выполнения, panic/throw/catch и сокращение опционального поля в конвейере.

Токены владения и получателя Rust — &self, &mut self, Vec<T>, use crate:: — допустимы только в явно обозначенном материале о взаимодействии, но не в обычном Топазе. Разворачивание записи в стиле JavaScript и блоки методов Rust также не становятся синтаксисом Топаза лишь потому, что их умеет выразить одна целевая платформа.

Текущие формы собраны в Кратком обзоре синтаксиса. Исправления операторов смотрите в Операторы и выражения, а структуру программы — в Модули и видимость.