Какой вариант использования контрактов Kotlin в разработке Android - PullRequest
1 голос
/ 15 октября 2019

Я изучал образцы архитектуры Google.

https://github.com/android/architecture-samples/tree/master

И то, что я заметил, очень часто используется contracts

Например: в TasksActivity мы находим этот код:

private fun setupNavigationDrawer() {
    drawerLayout = (findViewById<DrawerLayout>(R.id.drawer_layout))
        .apply {
            setStatusBarBackground(R.color.colorPrimaryDark)
        }
}

и перед contracts мы бы написали это так:

private fun setupNavigationDrawer() {
    drawerLayout = (findViewById(R.id.drawer_layout))
    drawerLayout.setStatusBarBackground(R.color.colorPrimaryDark)
}

При нажатии apply мы видим InvocationKind.EXACTLY_ONCE, что означает, что этот контракт гарантирует, что метод setStatusBarBackgroundвызывается только один раз.

Какова практическая польза от этой проверки и когда ее следует использовать? Потому что, на мой взгляд, он более кодовый и менее читабельный.

1 Ответ

2 голосов
/ 15 октября 2019

Контракты были добавлены в Kotlin 1.3, но apply существует вечно. Контракты являются только подсказками компилятора и позволяют таким функциям, как apply, иметь дополнительные варианты использования (например, возможность инициализировать val).

apply чаще используется для краткости кода. Ваш пример является крайним случаем, когда это спорно ли код чист с ним. Если вы вызываете серию функций настройки для объекта, это, очевидно, будет полезно для ясности и краткости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...