Разбор вывода программы с companion object в Kotlin

Вызов clazz.test() выбирает метод, поэтому сначала печатается function test, затем property test internal. Лямбда свойства test и методы companion здесь не вызываются.

Короткий ответ

Что ответить на собеседовании

Вызов clazz.test() выбирает метод, поэтому сначала печатается function test, затем property test internal. Лямбда свойства test и методы companion здесь не вызываются.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой набор строк будет напечатан в консоль после запуска следующего кода.

fun main() {
    val clazz = TestClass()
    clazz.test()
}

class TestClass {

    val testInternal = {
        println("property test internal")
    }

    val test = {
        println("property test")
        test()
    }

    fun test() {
        println("function test")
        testInternal()
        fun testInternal() {
            println("internal function test")
        }
    }

    companion object {
        fun test() {
            println("Companion test")
        }

        fun testInternal() {
            println("Companion test internal")
        }
    }
}

Ответ

Вызов clazz.test() выбирает метод, поэтому сначала печатается function test, затем property test internal. Лямбда свойства test и методы companion здесь не вызываются.

Локальная fun testInternal объявлена ниже места вызова и ещё не находится в его области видимости. Вызов разрешается к свойству-лямбде экземпляра testInternal. Само объявление локальной функции не запускает её тело. Совпадение имён свойства, метода и companion затрудняет чтение, поэтому в рабочем коде такие имена лучше развести.

Источник: kotlinlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее