0Pricing
Kotlin Academy · Урок

Псевдонимы типов

Давайте имена сложным типам

«Псевдонимы типов» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Что такое псевдоним типа

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

Псевдоним объявляется с помощью ключевого слова typealias.

typealias Name = String

fun main() {
    val n: Name = "Alice"
    println(n)
}

Именование функциональных типов

Функциональные типы могут быть громоздкими. Псевдоним значительно упрощает чтение сигнатур.

typealias Handler = (String) -> Unit

fun register(h: Handler) {
    h("event fired")
}

fun main() {
    register { msg -> println(msg) }
}

Именование обобщённых типов

Сложные вложенные обобщённые типы, например Map<String, List<Int>>, легче читать, если использовать псевдоним.

typealias ScoreBoard = Map<String, List<Int>>

fun main() {
    val board: ScoreBoard = mapOf("team1" to listOf(10, 20))
    println(board)
}

Псевдонимы прозрачны

Поскольку псевдоним обозначает тот же тип, значения полностью взаимозаменяемы. Name и String можно свободно смешивать без преобразования.

typealias Name = String

fun shout(s: String) = s.uppercase()

fun main() {
    val n: Name = "bob"
    println(shout(n))
}

Параметризованные псевдонимы

У псевдонима типа могут быть собственные параметры типа, которые передаются базовому типу.

typealias Pairs<T> = List<Pair<T, T>>

fun main() {
    val data: Pairs<Int> = listOf(1 to 2, 3 to 4)
    println(data)
}

Псевдонимы вложенных классов

Длинный путь к вложенному или внутреннему классу можно заменить коротким псевдонимом, уменьшив количество импортов и лишний текст.

class Outer {
    class Inner {
        fun hello() = "inner hello"
    }
}

typealias Shortcut = Outer.Inner

fun main() {
    println(Shortcut().hello())
}

Повышение понятности предметной области

Псевдонимы передают намерение. typealias UserId = Int показывает, что целое число представляет идентификатор пользователя, хотя компилятор по-прежнему рассматривает его как Int.

typealias UserId = Int
typealias Email = String

fun notify(id: UserId, to: Email) {
    println("Notify user " + id + " at " + to)
}

fun main() {
    notify(42, "a@b.com")
}

Без дополнительной типобезопасности

Помните: поскольку псевдонимы прозрачны, компилятор не помешает Вам передать UserId туда, где ожидается другой псевдоним Int. Это документация, а не средство контроля.

typealias UserId = Int
typealias OrderId = Int

fun process(order: OrderId) = println("order " + order)

fun main() {
    val user: UserId = 5
    process(user) // compiles fine — both are Int
}

Только на верхнем уровне

Псевдонимы типов должны объявляться на верхнем уровне файла. Нельзя определять их внутри функций или классов. Размещайте их рядом со связанным кодом или в отдельном файле.

typealias Callback = () -> Unit

fun run(cb: Callback) = cb()

fun main() {
    run { println("done") }
}

Когда использовать псевдонимы

Используйте псевдонимы типов, когда:

  • Функциональный тип или обобщённый тип длинный и повторяется
  • Вам нужны понятные имена для примитивных типов
  • Вам нужно короткое обозначение вложенного типа

Когда требуется настоящая типобезопасность, вместо этого используйте класс-значение.

Псевдоним или класс-значение

Псевдоним — это тот же тип с новым именем, без какой-либо защиты. Класс-значение — отдельный тип, который не позволяет смешивать значения. В следующем уроке рассматриваются классы-значения.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли псевдонимы типов.

Итоги

Вы изучили псевдонимы типов:

  • Объявляются с помощью typealias на верхнем уровне
  • Являются лишь новым именем и полностью прозрачны
  • Удобны для функциональных типов, обобщённых типов и повышения читаемости
  • Не добавляют типобезопасности

Далее: встраиваемые классы-значения для обёртки без дополнительных затрат.

Часто задаваемые вопросы

Урок «Псевдонимы типов» бесплатный?

Да — полный текст урока «Псевдонимы типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Псевдонимы типов»?

Давайте имена сложным типам Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Псевдонимы типов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Псевдонимы типов
  2. Встраиваемые классы-значения
  3. Варианты использования
  4. Ограничения
← Назад к Kotlin Academy