Что делает оператор ?:?Возвращает ненулевую левую часть, иначе вычисляет правую. Справа допустимы return или throw: val user = repo.find(id) ?: return. Пустая строка и ноль не равны null. Elvis.
Когда допустимо использовать !!?Когда нарушение явно принятого инварианта должно завершить выполнение исключением. !! не доказывает инвариант: при null он бросает NPE. Для отсутствующего пользовательского ввода обычно нужна обработка через ?./?:, а не утверждение. Not-null assertion.
Что такое платформенные типы?Тип с неизвестной nullability на границе Java, отображаемый как String!. Nullable-использование допускает null; ненулевое использование может вставить runtime-проверку и упасть. Не обещайте, что произвольная цепочка всегда упадёт в одном и том же месте. Platform types.
Почему smart cast не работает для var-свойства класса?Компилятор не гарантирует одинаковое значение var-свойства при двух чтениях: его может изменить другой код или getter. Сохраните одно чтение в локальную val; это стабилизирует проверяемую ссылку, но не делает весь объект потокобезопасным. Smart cast prerequisites.
Можно ли объявить lateinit var count: Int?Нет: lateinit требует ненулевого непримитивного типа. Для Int можно выбрать начальное значение, nullable-модель или Delegates.notNull(); у последнего чтение до присваивания тоже является ошибкой. Late-initialized properties.
Как Kotlin защищает ненулевые параметры, если функцию вызывают из Java?При обычной компиляции Kotlin/JVM публичные функции с ненулевыми ссылочными параметрами получают runtime-проверки. Java сама не запрещает передать null; проверка приводит к NPE на входе. Имя внутреннего Intrinsics-метода не является переносимым языковым контрактом. Calling Kotlin from Java.