Приветствую!
Продолжаем делать наш код более продвинутым :) Сегодня мы разберем на примерах зачем нужно ключевое слово typealias в Kotlin. Как оно работает, что дает программисту его использование, и как это всё отражается на байт-коде.
C помощью typealias, Котлин позволяет создать простой и короткий псевдоним нужного типа данных, который будет легко читаться и тем самым убрать нагромождение в коде.
👉 Давайте сразу посмотрим пример. Допустим, есть такая функция doSomething (а может даже не одна), которая берет другую функцию в качестве параметра и как-то её использует у себя. Мы видим, что там аж 6 параметров, и все их каждый раз надо писать:
Давайте напишем короткий псевдоним с помощью typealias:
Теперь мы видим, что функцию doSomething и все другие, которые берут на вход подобные будут выглядеть вот так вот коротко.
Формат используется такой : typealias новое_имя = тип данных
Заметьте, мы не вводим нового типа данных тут, мы просто создали псевдоним для уже существующего.
👉 Давайте рассмотрим ещё пример, как использовать это для класса, к функциям которого, тяжко каждый раз пробираться:
Чтобы получить X и Y надо каждый раз надо писать:
А если мы введем typealias, то сможем существенно сократить весь путь до вызова функции:
Бывает, что классов с длинными именами очень много и если обращаться к ним приходится часто, то не плохо бы иметь псевдонимы для каждого такого случая.
В целом это удобно когда хочется добиться краткости в коде, хотя шанс всё сделать запутанным тоже остается =) Потому надо использовать это с умом.
👉 Напоследок, давайте посмотрим как typealias поможет нам разрулить конфликт с классами, которые имеют одинаковое имя, если мы хотим использовать их в одном месте.
У нас есть два класса, оба с именем Point, первый для работы с 2D а второй — с 3D.
Вот они поближе:
Представим, что мы хотим их использовать в одном месте сразу оба. Можно сделать это так:
Хорошо, но здесь есть возможность сократить пути до классов с помощью псевдонимов. Давайте так и сделаем. Напишем typealias для обоих классов:
И видим что доступ до классов стал на порядок красифффши :Р
Байт-код
Если смотреть байт-код, то никаких никаких Typealias вы там не увидите, они существуют только для вашего удобства. Компилятор сразу заменит ваши альтернативные имена реально существующими.
Подведем итоги:
- Typealias не вводит новые типы, а является лишь псевдонимом для существующих.
- Альтернативные имена для типов позволяют сделать код более наглядным что очень классно, но если с ними переборщить, то можно и ухудшить общую читаемость.
- Typealias объявляется вне классов и функций (top-level declarations).
- Typealias не защитит вас от неверной подстановки типов данных. Допустим у нас есть функция которая должна посчитать расстояние, она принимает на вход значение в километрах, а мы дадим ей мили вместо этого, то никаких предупреждений или ошибок не будет, и ошибочный код пройдет:
На этом всё. Спасибо за внимание. Обязательно подписывайтесь на этот канал, будет ещё очень много интересного. До скорого!