【问题标题】:Can composable functions call non-composable functions?可组合函数可以调用不可组合函数吗?
【发布时间】:2020-09-05 14:27:23
【问题描述】:

我在 Android 中看到了新的 Jetpack Compose,并决定去看看。我一直在尝试理解一些关于可组合的基本概念。 我的问题是:composable functions 可以调用non-composable 函数吗? 我已经用谷歌搜索了。

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    我的问题是:可组合函数可以调用不可组合函数吗?

    是的。 Kotlin 中的几乎所有内容都以函数调用的形式结束,并且您可用的大多数函数都是不可组合的。

    这是 Google 的一些 Compose UI 示例代码:

    @Composable
    fun NewsStory() {
        val image = imageResource(R.drawable.header)
        Column(
            modifier = Modifier.padding(16.dp)
        ) {
            val imageModifier = Modifier
                .preferredHeight(180.dp)
                .fillMaxWidth()
    
            Image(image, modifier = imageModifier,
                      contentScale = ContentScale.Crop)
            Spacer(Modifier.preferredHeight(16.dp))
    
            Text("A day in Shark Fin Cove")
            Text("Davenport, California")
            Text("December 2018")
        }
    }
    

    其中,以下函数不是@Composable

    • imageResource()
    • Modifier.padding()
    • Modifier.preferredHeight()
    • Modifier.fillMaxWidth()

    规则是标记为@Composable 的函数需要由标记为@Composable 的另一个函数或可组合函数的一小部分最终消费者中的一个函数调用。这让人想起协程,其中suspend 函数需要由其他suspend 函数或suspend 函数的一小部分最终消费者之一调用(例如,像launch() 这样的协程构建器)。

    【讨论】:

    • 只是一个附带问题(纯粹基于意见,如果您不想回答,请忽略):Jetpack Compose 的出现是否会成为 Android Java 开发人员的问题?就像它最终会用 Java 取代 Android 一样吗?你会建议像我这样的 Java 人进行转换吗?提前致谢
    • @Quwayssim:“我昨天刚开始学习 Kotlin。我只是决定尝试 Jetpack Composable 以获得它的乐趣。” ——你的热情真好!但是,Jetpack Compose 仍然很新,我不会向 Kotlin 的新手推荐它。 “Jetpack Compose 的出现会不会成为 Android Java 开发者的难题?” -- Android 开发者需要学习 Kotlin,就像大多数 iOS 开发者需要学习 Swift 而不是仅仅依赖于 Objective-C。
    • @Quwaysim:“你会建议像我这样的 Java 人进行转换吗?” -- 如果您的意思是切换到 Kotlin,是的,您应该在 2021 年底之前学习 Kotlin,恕我直言。如果您的意思是切换到 Jetpack Compose,虽然欢迎早期采用者使用它,但恕我直言,大多数开发人员可以放心在它以稳定的形式发布之前忽略它。
    • 非常感谢。我真的很感激。你的回答很有说服力:D。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多