KT Kotlin  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Расширения

Расширения Kotlin рассматриваются через статическое разрешение, nullable-получатели, свойства-расширения и область видимости. Главная задача — не спутать удобную форму вызова с настоящим изменением класса или виртуальным переопределением.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 1 из 20
Что произойдёт при запуске примера «Вычисляемое extension property»?
KotlinСвойства-расширения · Вычисляемое extension property
// Проследите фактическое выполнение без изменения кода.
val String.words: Int
    get() = trim().split(Regex("\\s+")).count { it.isNotEmpty() }

fun main() = println(" one  two ".words)
Вопрос 2 из 20
Какое утверждение точнее всего объясняет поведение фрагмента «Статический тип receiver»?
KotlinСтатическое разрешение · Статический тип receiver
// На ревью требуется объяснить причину поведения.
open class Shape
class Circle : Shape()
fun Shape.name() = "shape"
fun Circle.name() = "circle"

fun printName(s: Shape) = println(s.name())
fun main() = printName(Circle())
Вопрос 3 из 20
Как укрепить «File-private extension», не переписывая соседние модули?
KotlinОбласти применения · File-private extension
// Сохраните назначение фрагмента, но укрепите его контракт.
package demo

private fun String.secret() = reversed()
fun expose(s: String) = s.secret()

fun main() = println(expose("abc"))
Вопрос 4 из 20
Какой риск не исчезает после правки «Безопасное расширение String»: Давать расширению имя, отражающее поведение на границе, и размещать его в узкой области импорта?
Вопрос 5 из 20
Что следует изменить прежде всего во фрагменте «Статический тип receiver»?
KotlinСтатическое разрешение · Статический тип receiver
// Сохраните назначение фрагмента, но укрепите его контракт.
open class Shape
class Circle : Shape()
fun Shape.name() = "shape"
fun Circle.name() = "circle"

fun printName(s: Shape) = println(s.name())
fun main() = printName(Circle())
Вопрос 6 из 20
Какой пограничный сценарий обязательно добавить к проверкам «File-private extension»?
Вопрос 7 из 20
Какие символы будут выведены?
KotlinФункции-расширения · Безопасное расширение String
// Проследите фактическое выполнение без изменения кода.
fun String.lastOrDash(): Char = lastOrNull() ?: '-'
fun main() {
    println("Kotlin".lastOrDash())
    println("".lastOrDash())
}
Вопрос 8 из 20
Что в семантике Kotlin или используемого API объясняет «Вычисляемое extension property»?
KotlinСвойства-расширения · Вычисляемое extension property
// На ревью требуется объяснить причину поведения.
val String.words: Int
    get() = trim().split(Regex("\\s+")).count { it.isNotEmpty() }

fun main() = println(" one  two ".words)
Вопрос 9 из 20
Какова практическая цена решения «File-private extension»: Размещать общеупотребимые расширения в явно названном модуле, а локальные адаптеры держать file-private?
Вопрос 10 из 20
Почему поведение «Безопасное расширение String» не является случайностью?
KotlinФункции-расширения · Безопасное расширение String
// На ревью требуется объяснить причину поведения.
fun String.lastOrDash(): Char = lastOrNull() ?: '-'
fun main() {
    println("Kotlin".lastOrDash())
    println("".lastOrDash())
}
Вопрос 11 из 20
Что стоит исправить в «Вычисляемое extension property» перед слиянием?
KotlinСвойства-расширения · Вычисляемое extension property
// Сохраните назначение фрагмента, но укрепите его контракт.
val String.words: Int
    get() = trim().split(Regex("\\s+")).count { it.isNotEmpty() }

fun main() = println(" one  two ".words)
Вопрос 12 из 20
Какой редкий случай способен сломать наивную трактовку «Статический тип receiver»?
Вопрос 13 из 20
Какое изменение лучше всего защищает границу «Безопасное расширение String»?
KotlinФункции-расширения · Безопасное расширение String
// Сохраните назначение фрагмента, но укрепите его контракт.
fun String.lastOrDash(): Char = lastOrNull() ?: '-'
fun main() {
    println("Kotlin".lastOrDash())
    println("".lastOrDash())
}
Вопрос 14 из 20
Какой редкий случай способен сломать наивную трактовку «Вычисляемое extension property»?
Вопрос 15 из 20
Команда собирается для полиморфного поведения объявить открытый член или внешний visitor, а не набор расширений по подтипам. Что придётся учитывать после внедрения в «Статический тип receiver»?
Вопрос 16 из 20
Что произойдёт в этом файле?
KotlinОбласти применения · File-private extension
// Проследите фактическое выполнение без изменения кода.
package demo

private fun String.secret() = reversed()
fun expose(s: String) = s.secret()

fun main() = println(expose("abc"))
Вопрос 17 из 20
Команда собирается использовать вычисляемое свойство только для дешёвой и естественной характеристики объекта; тяжёлую работу оставить функции. Что придётся учитывать после внедрения в «Вычисляемое extension property»?
Вопрос 18 из 20
Какой результат даст код «Статический тип receiver»?
KotlinСтатическое разрешение · Статический тип receiver
// Проследите фактическое выполнение без изменения кода.
open class Shape
class Circle : Shape()
fun Shape.name() = "shape"
fun Circle.name() = "circle"

fun printName(s: Shape) = println(s.name())
fun main() = printName(Circle())
Вопрос 19 из 20
На какой контракт языка или библиотеки опирается «File-private extension»?
KotlinОбласти применения · File-private extension
// На ревью требуется объяснить причину поведения.
package demo

private fun String.secret() = reversed()
fun expose(s: String) = s.secret()

fun main() = println(expose("abc"))
Вопрос 20 из 20
Где упрощённое объяснение «Безопасное расширение String» перестаёт работать?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу