Найти тему
Kotlin King

Kotlin. Зачем нужно ключевое слово typealias?

Оглавление

Приветствую!

Продолжаем делать наш код более продвинутым :) Сегодня мы разберем на примерах зачем нужно ключевое слово typealias в Kotlin. Как оно работает, что дает программисту его использование, и как это всё отражается на байт-коде.

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

👉 Давайте сразу посмотрим пример. Допустим, есть такая функция doSomething (а может даже не одна), которая берет другую функцию в качестве параметра и как-то её использует у себя. Мы видим, что там аж 6 параметров, и все их каждый раз надо писать:

-2

Давайте напишем короткий псевдоним с помощью typealias:

-3

Теперь мы видим, что функцию doSomething и все другие, которые берут на вход подобные будут выглядеть вот так вот коротко.

Формат используется такой : typealias новое_имя = тип данных

Заметьте, мы не вводим нового типа данных тут, мы просто создали псевдоним для уже существующего.

👉 Давайте рассмотрим ещё пример, как использовать это для класса, к функциям которого, тяжко каждый раз пробираться:

-4

Чтобы получить X и Y надо каждый раз надо писать:

-5

А если мы введем typealias, то сможем существенно сократить весь путь до вызова функции:

-6

Бывает, что классов с длинными именами очень много и если обращаться к ним приходится часто, то не плохо бы иметь псевдонимы для каждого такого случая.

В целом это удобно когда хочется добиться краткости в коде, хотя шанс всё сделать запутанным тоже остается =) Потому надо использовать это с умом.

👉 Напоследок, давайте посмотрим как typealias поможет нам разрулить конфликт с классами, которые имеют одинаковое имя, если мы хотим использовать их в одном месте.

У нас есть два класса, оба с именем Point, первый для работы с 2D а второй — с 3D.

-7

Вот они поближе:

-8
-9

Представим, что мы хотим их использовать в одном месте сразу оба. Можно сделать это так:

-10

Хорошо, но здесь есть возможность сократить пути до классов с помощью псевдонимов. Давайте так и сделаем. Напишем typealias для обоих классов:

-11

И видим что доступ до классов стал на порядок красифффши :Р

Байт-код

Если смотреть байт-код, то никаких никаких Typealias вы там не увидите, они существуют только для вашего удобства. Компилятор сразу заменит ваши альтернативные имена реально существующими.

Подведем итоги:

  • Typealias не вводит новые типы, а является лишь псевдонимом для существующих.
  • Альтернативные имена для типов позволяют сделать код более наглядным что очень классно, но если с ними переборщить, то можно и ухудшить общую читаемость.
  • Typealias объявляется вне классов и функций (top-level declarations).
  • Typealias не защитит вас от неверной подстановки типов данных. Допустим у нас есть функция которая должна посчитать расстояние, она принимает на вход значение в километрах, а мы дадим ей мили вместо этого, то никаких предупреждений или ошибок не будет, и ошибочный код пройдет:
-12

На этом всё. Спасибо за внимание. Обязательно подписывайтесь на этот канал, будет ещё очень много интересного. До скорого!