НОВОСТИ
"
Содержание статьи
01. Почитать
01.1 Security-новшества Android 12
02. Разработчику
02.1 Полезные функции-расширения
02.2 Вредные функции-расширения
02.3 Лучший способ сбора данных из Flow
02.4 Как работают корутины
03. Библиотеки
ПОЧИТАТЬ
Security-новшества Android 12
First preview of Android 12 — анонс Android 12, самая интересная часть которого — новые
механизмы обеспечения безопасности.
РАЗРАБОТЧИКУ
Полезные функции-расширения
5 Kotlin Extensions To Make Your Android Code More Expressive — очередная статья о том,
как сделать код на Kotlin выразительнее с помощью функций‑расширений.
fun View.show(){
this.visibility = View.VISIBLE
}
fun View.hide() {
this.visibility = View.INVISIBLE
}
fun View.remove(){
this.visibility = View.GONE
}
Вредные функции-расширения
Bad Kotlin Extensions — статья о том, как не надо писать функции‑расширения на Kotlin. Боль-
шая часть текста основана на стандартных правилах создания функций: функция не должна
делать больше, чем заявлено в ее названии; функция должна иметь четкое имя, которое
на 100% однозначно отражает ее суть, и так далее. Но есть и несколько весьма интересных
примеров:
!5
Она весьма похожа на запись 5!, которая используется для расчета факториала в матема-
тике. Однако в данном случае такая форма, конечно же, будет сбивать с толку, так как в язы-
ках программирования восклицательный знак почти всегда означает отрицание.
Выглядит классно, но пользы тут не так уж и много, а оверхед от создания четырех объектов
высокий.
Представим, что нам необходимо собрать данные из Flow. Способ сделать это «в лоб» выг-
лядел бы так:
scope.launch {
flow
.onEach { println(it) }
.collect()
}
flow
.onEach { println(it) }
.launchIn(scope)
К примеру, когда нужно собрать данные из двух Flow, легко ошибиться и сделать это так:
scope.launch {
flow1
.onEach { println(it) }
.collect()
flow2
.onEach { println(it) }
.collect()
}
Ошибка здесь в том, что данные из двух Flow не будут собираться одновременно. Сначала
будут получены все данные из flow1, и только затем начнется сбор flow2.
scope.launch {
flow1
.collect { println(it) }
}
scope.launch {
flow2
.collect { println(it) }
}
flow1
.onEach { println(it) }
.launchIn(coroutineScope)
flow2
.onEach { println(it) }
.launchIn(coroutineScope)
Чтобы разобраться с корутинами (coroutine), надо понять, что такое routine. А это не что иное,
как функция. Например, такая:
saveTasks(tasks)
}
class State(
var label: Int = 0,
var result: Any? = null
)
1 -> {
// Точка возобновления исполнения
val user = state.result as User
val tasks = loadTasks(user)
println("tasks loaded")
state.result = tasks
// Точка остановки исполнения
}
2 -> {
// Точка возобновления исполнения
val tasks = state.result as List<Task>
saveTasks(tasks)
}
}
}
fun main() {
val state = State()
saveUserTasks(7, state)
saveUserTasks(7, state)
saveUserTasks(7, state)
}
Результат будет тот же, что и в случае приведенной в начале классической функции.
Но теперь у нас появилась возможность запускать и приостанавливать исполнение функции
в нескольких точках. Если мы добавим сюда еще несколько подобных корутин, то сможем
выполнять их фрагменты поочередно, создав иллюзию одновременного исполнения.
БИБЛИОТЕКИ
Оцени статью:
!!!!!
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и
древних видеоигр.
! zobnin.github.io
Оставить мнение
Комментарий
ОТПРАВИТЬ
Это ловушка! Как мы расставляли Нам нужно больше бэкапов! Делаем 3 hour назад
ханипоты и кто в них попался машину для резервного копирования Методы черного SEO используются для
4 day назад за 10 баксов распространения малвари
14.01.2021
4 hour назад
Близкие контакты. Как работают Особые инструменты. Утилиты Linux, Неизвестные вымогают у компании Tether 500
атаки на чиповые карты которые мы используем, не зная о биткоинов
5 day назад них
12 hour назад
30.12.2020
Chrome будет принудительно подставлять к
Hack Overflow. Как взломали Stack Nextcloud. Настраиваем адресам префикс HTTPS
Overflow и как шло расследование персональное облако и смотрим, 14 hour назад
Разбираемся, как работает атака на устройство для прослушки Хакатон Demhack 2 будет посвящен вопросам
WebSocket 09.11.2020 приватности и доступа к информации
3 week назад