Menu
Coddy logo textTech

Проблема, которую решают Generics

Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 57 из 73.

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

Вариант первый: написать отдельную копию для каждого типа. Тела функций идентичны; различаются только аннотации:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

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

Вариант второй: объединить их в одну функцию с типом any:

local function echo(value: any): any
    return value
end

Теперь одна функция обрабатывает всё — но вы расплачиваетесь типобезопасностью. Когда вы вызываете echo("hello"), checker больше не знает, что result — это string. Он знает только any, поэтому автодополнение отключается, а ошибки типов проскакивают: связь между тем, что попало на вход, и тем, что получается на выходе, теряется.

Что вам действительно нужно — это функция, которая работает для каждого типа и запоминает, какой тип использовался при каждом вызове. Это именно то, что дают вам обобщенные типы (generics) — и они являются темой этой главы.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau