?. — безопасный вызов (результат null, если receiver null); ?: (Elvis) подставляет значение по умолчанию; !! утверждает non-null и бросает NPE, если null.
Разбор
user?.name → String?.
name ?: "guest" → всегда String.
!! уместен, когда контракт гарантирует non-null (редко).
Цепочки: user?.profile?.avatarUrl ?: default.
Пример
val title = dto.title?.trim().orEmpty()
Итог
Предпочитайте ?./?: вместо !! в production-коде.
Чем отличаются операторы `?.`, `?:` и `!!`? · Sobeso