Ответ
@Composable — это аннотация в Jetpack Compose, которая обозначает функции, описывающие UI. Такие функции могут вызывать другие @Composable функции и автоматически реагируют на изменения состояния.
Особенности:
- Не возвращают значение явно (возвращают
Unit) - Могут вызываться только из других
@Composableфункций илиsetContent - Имеют возможность рекомпозиции при изменении состояния
Пример:
@Composable
fun Greeting(name: String) {
Text(text = "Hello, $name!")
} Ответ 18+ 🔞
Вот, смотри, объясняю на пальцах, как есть. Есть такая штука — @Composable. Это, блядь, не просто аннотация, это как волшебное слово для Jetpack Compose. Сказал его над функцией — и всё, эта функция теперь описывает кусок интерфейса. Прямо как будто взял кисточку и начал красить, только кодом.
Что она делает, эта твоя композебл-функция? Она может звать других таких же композебл-товарищей и, внимание, главная фишка — она сама обновляется, когда данные меняются. Не надо вручную тыкать invalidate() или ещё какую хуйню. Сказал name = "Вася", а потом name = "Петя" — и интерфейс сам, блядь, перерисуется. Магия, ёпта!
Важные правила, чтобы не выстрелить себе в ногу:
- Ничего не возвращает. Ну то есть возвращает
Unit, по-нашему —void. Её задача нарисовать, а не посчитать. - Вызывать её можно только в особых местах. Или из другой такой же композебл-функции, или из этого
setContent{}. Попробуешь вызвать из обычного метода — получишь пиздюлину от компилятора, он тебе сразу: «Ты куда, мудак?». - Рекомпозиция — её конёк. Это когда состояние поменялось, и функция перезапускается, чтобы отрисовать всё заново с новыми данными. Но умно, не всю, а только то, что надо.
Вот, смотри пример, чтобы вообще всё стало ясно, как божий день:
@Composable
fun Greeting(name: String) {
Text(text = "Hello, $name!")
}
Всё! Объявил функцию, повесил @Composable, внутри вызвал другую композебл-функцию Text. Передал туда строку. Готово. Теперь, если name изменится где-то там, в состоянии, этот Text сам обновится на экране. Красота, ядрёна вошь!