Объяснение
Тип T? допускает null, T — нет. Безопасный вызов ?. пропускает операцию при null, Elvis ?: задаёт альтернативу. !! превращает предположение автора в возможное исключение.
Задача для самостоятельного решения
Что даёт name?.length ?: 0 при name=null?
Показать разбор ответа
Ноль: безопасный вызов возвращает null, Elvis выбирает запасное значение. Для пользовательского ввода это обычно лучше необоснованного !!.