Перейти к содержимому
На этой странице

Область видимости

Все темы Kotlin Developer

Опишите, что представляет собой область видимости (scope).

Область видимости (scope) в программировании определяет доступность переменных и других идентификаторов в определенных частях кода. Это означает, что переменная может быть использована только в определенном контексте, который определяется областью видимости, в которой она была объявлена. Область видимости может быть локальной (ограниченной блоком кода), глобальной (доступной из любой части программы) или принадлежать к другим уровням, таким как классы, функции, модули и т.д.


Какие модификаторы видимости есть в Kotlin и чем они отличаются?

В Kotlin существуют следующие типы областей видимости:

  1. public: Видимость по умолчанию. Доступно везде.

  2. private: Видимость только в пределах класса или файла.

  3. protected: Видимость в пределах класса и подклассов.

  4. internal: Видимость в пределах модуля.


Как работает ключевое слово private в контексте класса и объекта?

Private в контексте класса и объекта:

  • В контексте класса: Члены, объявленные с private, видны только внутри этого класса.

    class MyClass {
        private val secret = "Secret"
        fun revealSecret() = secret
    }
  • В контексте файла: Функции и свойства, объявленные с private, видны только внутри этого файла.

    private fun secretFunction() = "Secret Function"

Объясните, как использовать internal в Kotlin и в каких случаях это полезно.

internal означает, что элемент виден только в пределах модуля, в котором он объявлен.

Пример:

internal class InternalClass {
    internal val internalProperty = "Internal Property"
}

fun main() {
    val instance = InternalClass()
    println(instance.internalProperty)
}

Полезно для:

  • Сокрытия реализации внутри модуля.

  • Защиты внутренних деталей библиотеки, оставляя публичными только необходимые части.


Что такое "shadowing" переменных и как его избежать?

Shadowing — это ситуация, когда локальная переменная скрывает переменную с таким же именем из внешней области видимости.

Пример:

val x = 10
fun printX() {
    val x = 20  // Эта переменная скрывает внешнюю переменную x
    println(x)  // Выведет 20
}

Чтобы избежать shadowing:

  • Используйте уникальные имена для переменных.

  • Избегайте дублирования имен переменных в разных областях видимости.

val outerX = 10
fun printX() {
    val innerX = 20
    println(innerX)  // Теперь переменные имеют разные имена
}

Собеседования: Kotlin

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Kotlin-разработчик, Android-разработчик, Backend-разработчик на Kotlin. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.