#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
}вместо этого можно использовать функцию
runwebviewSetting?.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 аккуратнее.