Data class vs Typealias vs Value class
Наприме, есть 2 переменных типа String — в одной храним полное ФИО, а в другой инициалы
и эти два параметра нужно перекидывать во множество функций
варианты решения:
• выбираем понятные длинные названия для переменных и везде используем их
val fullName: String
val shortName: String
минусы: нельзя сделать проверку типа, ведь обе переменные String, значит легко их перепутать
• создаем data-класс и упаковываем два поля туда
data class Names(fullName: String, shortName: String)
минусы: если играть в оптимизацию по памяти, то проиграешь + возможно не везде эти два поля нужно передавать вместе
• создаем typealias
typealias FullName = String
typealias ShortName = String
минус:
• typealias — не новый класс, поэтому у него не может быть своих функций, полей, конструкторов и т.д.
• typealias не даст сделать проверку типа, ведь FullName == String
• создаем value class
value class FullName(value: String)
value class ShortName(value: String)
плюсы:
• компилятор сам решит, где стоит оптимизировать и заинлайнить переменную, а где стоит оставить класс-обертку
• можно добавить функции и поля каждому value class
• можно делать проверку типа
минусы:
• нужно внимательно следить за .toString() — результат зависит от того, подставит компилятор value-класс или сразу его значение
