tgoop.com/android_live/509
Last Update:
Немного про let
#kotlin #article
Во вчерашнем посте был первый совет с использованием let для проверки переменной на null. @atlantik_hak подкинул годную статью, где описываются примеры, когда не стоит использовать let для этих целей, а когда let — самое лучшее решение для проверки.
Итак, когда лучше не использовать let:
⭕ для проверки на null immutable переменной. Хотя и запись a?.let { foo(a) }
получается довольно изящной, она генерирует лишнюю переменную в байткоде, в отличии от аналога if not null
. Врядли вы заметите огромную разницу, но если можно избежать создания лишней переменной, то почему бы этого не сделать.
⭕ если вы хотите использовать переменную только внутри let. Чаще всего мы делаем проверку именно для того, чтобы использовать её внутри блока. Например, мы хотим что-то сделать с webView:webviewSetting?.let {
it.javaScriptEnabled = true
it.databaseEnabled = true
}
вместо этого можно использовать функцию run
webviewSetting?.run {
javaScriptEnabled = true
databaseEnabled = true
}
который уберёт лишние it
.
⭕ если хотите передать переменную дальше по цепочке. Например, если вы хотите указать размер списка, если он не null, а дальше что-то продолжить делать с ним. Альтернативным решением будет использование also
, хотя это тоже не идеальное решение.
Когда же тогда использовать let?
🟢 для проверки на null mutable переменной. Тут хорошо подходит let, так как он избавляет нас от дополнительного ?
при взаимодействии с переменной. private var str: String? = null
fun process() {
str?.let { /*Do something*/ }
}
🟢 если хотите использовать переменную снаружи от let. Например, если вы хотите проициализировать другие переменные тем классом, что был у вас:var javaScriptEnabled = false
var databaseEnabled = false
webviewSetting?.let {
javaScriptEnabled = it.javaScriptEnabled
databaseEnabled = it.databaseEnabled
}
Это удобнее для review кода, чем функция run
.
🟢 когда у вас есть проверка из цепочки `?`. Например:return string?.asIterable()?.distinct()?.sorted()
генерирует больше байткода, чем:return string?.let {
it.asIterable().distinct().sorted()
}
Спасибо подписчикам, которые дают обратную связь по постам ✌️.
И уверен, что теперь вы будете использовать let
аккуратнее.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/509