Рубрика: Kotlin

  • Extension в котлине, как работают? Можно ли сделать extension к интерфейсу?

    Extension-функции — одна из фишек Kotlin, дающая синтаксический сахар. Это способ «добавить» новую функцию существующему типу без наследования или декоратора. Как работают extension-функции под капотом? Это обычные статические функции, которым компилятор даёт особый синтаксис. То есть: Можно ли делать extension к интерфейсу? Да, можно! Но важно: если объект реализует интерфейс, и ты вызываешь extension —…

  • Делегаты в Kotlin-е. Какие бывают, зачем нужны?

    Делегаты в Kotlin — мощный инструмент, который позволяет переопределить поведение геттера/сеттера, вынести повторяющуюся логику, и писать более декларативный, читаемый код. Делегирование свойства — это когда мы передаём логику get() и set() специальному объекту.В Kotlin это делается с помощью ключевого слова by. Какие бывают делегаты в Kotlin? Делегат Назначение lazy { … } Вычисляется один раз…

  • init{} в Kotlin это аналог чего в Java?

    init {} в Kotlin — это блок инициализации, и его аналог в Java — это инициализатор экземпляра (instance initializer block). Пример Kotlin: Аналог в Java: Обрати внимание: Как работает? Этап Kotlin (init {}) Java Когда выполняется при вызове primary constructor перед телом конструктора Может быть несколько? Да, выполняются в порядке объявления Да Можно использовать параметры…

  • Sealed class в Kotlin-е — что такое, зачем нужны? Можно ли наследовать один от другого? В чем отличие от Sealed interface?

    Sealed class — это класс, у которого жестко ограничен список подклассов. Все наследники должны быть объявлены в том же файле, что и сам sealed class. Зачем нужны? Можно ли наследовать один sealed от другого? Один sealed class может наследовать другую, но: Sealed interface — что это такое? Добавлено в Kotlin 1.5+ Похож на sealed class,…

  • Что такое Nothing в Kotlin-е, зачем нужен?

    Nothing — это специальный bottom type в Kotlin. То есть: тип, у которого нет ни одного значения. Ни один объект не может быть экземпляром Nothing. Nothing — это тип, который представляет код, который никогда не завершится успешно (т.е. никогда не вернёт управление). Позволяет выразить невозможность возврата

  • Что такое object? Потокобезопасен ли он? Какие еще есть реализации синглтона?

    Ответы: Что такое object? object — это ключевое слово в Kotlin, которое используется для создания синглтона, то есть объекта, который существует в единственном экземпляре на протяжении всей программы. object также используется для создания анонимных объектов, например, при реализации интерфейсов на месте. object можно использовать для создания компаньон-объекта внутри класса. Компаньон-объект является аналогом статических членов в…

  • Можно использовать var поля в data class-е? Что будет, если использовать data class с var полем, например, в качестве ключа хэшмапы?

    Ответ: Можно, но не надо) Использование var в data class возможно, это не всегда хорошая идея, особенно в контексте использования этих объектов в качестве ключей в хэш-таблицах или других коллекциях, которые полагаются на неизменность объектов для правильной работы. Если свойства объекта могут изменяться, это может привести к неожиданным ошибкам, нарушению целостности данных и некорректному поведению…

  • Можно ли наследоваться от data class-а? Почему?

    Ответ: Нельзя. В Kotlin нельзя наследоваться от data class-а, и это связано с особенностями их проектирования и автоматической генерацией методов. Data class-ы автоматически генерируют методы equals(), hashCode(), toString() и copy(), которые зависят от свойств, объявленных в первичном конструкторе. Если бы наследование от Data class-а было разрешено, это могло бы привести к сложностям с поддержкой этих…

  • Можно ли на корутинах получить дедлок?

    Ответ: Да, можно. Если есть корутины, которые взаимозависимы от результатов друг друга и блокируют друг друга, то дедлок возможен. Как их избежать:

  • Участвуют ли в генерации методов data class поля из body? Можно ли выпилить из генерации поле из конструктора?

    Ответ: Нет. В Kotlin только свойства, объявленные в первичном конструкторе дата-класса, участвуют в генерации методов equals(), hashCode(), toString(), copy() и компонентных функций (component1(), component2() и т.д.). Свойства, объявленные в теле класса (body), не участвуют в этих автоматически сгенерированных методах. Таким образом, вы можете исключить поле из генерации методов, объявив его в теле класса, а не…

  • Зачем нужны data class-ы в Kotlin? Чем отличаются от обычных классов?

    Ответ: Чаще всего(!) нужны для уменьшения бойлерплейт кода при создании классов, которые будут использоваться для хранения данных. Внимание: именно «чаще всего», а не «только для» =) Автоматическая генерация методов equals(), hashCode(), toString() и copy() избавляет от необходимости вручную писать бойлерплейт код, что позволяет сосредоточиться на логике приложения. Также, их используют когда нужно сделать копирование объекта.…

  • Вопросы для Android-собесов

    Приуэт! Давно ничего не писал) Это вопросы для собесов, по которым я сам готовлюсь. Список обновляется и улучшается. Также будут посты с ответами, по каждому из вопросов. Вопросы я составляю так, чтобы можно было сразу копипастнуть Гуглу или ЧатГопоте(ChatGPT) и получить более подробный ответ =) Android Kotlin Coroutines Coroutine Flows Jetpack Compose Collections Java, JVM,…