@Composable‑функция — это специальная функция в Jetpack Compose, предназначенная для декларативного описания UI.
Это функция, которая:
- используется для создания интерфейса
- может вкладываться в другие
@Composable‑функции - не вызывает UI напрямую (как
setText()), а декларирует, каким должен быть UI при данномstate
Что делает @Composable?
- Аннотация говорит компилятору Jetpack Compose, что:
- функцию нужно инструментировать
- она должна принимать скрытый
Composerи флагchangedв байткоде
- Она может участвовать в рекомпозиции
- Она не может быть вызвана из обычной функции без
@Composable
Основные правила и ограничения
| Правило | Объяснение |
|---|---|
Обязательная аннотация @Composable | Без неё функция не участвует в рекомпозиции и не может вызывать другие composable |
| Имя с заглавной буквы (PascalCase) | Не обязательно, но рекомендуется (Google style guide) |
Нет возвращаемого значения (Unit) | Обычно да: UI-описание => Unit; но не строго — возможен @Composable fun <T> return T |
Нельзя вызывать без @Composable‑контекста | Greeting() вызов возможен только внутри другой composable или setContent {} |
Не блокировать поток! (delay, withContext) | Можно использовать только suspend внутри LaunchedEffect, rememberCoroutineScope, и пр. |
| Composable функции могут быть inline | Для оптимизации и composition |
| Побочные эффекты запрещены напрямую | Используй SideEffect, LaunchedEffect, rememberUpdatedState, и др. |