Kotlin中的代码1和代码2有什么不同?

Kotlin中的代码1和代码2有什么不同?,kotlin,Kotlin,代码1来自一个示例项目,我修改了一些代码并将其更改为代码2,代码2也可以正确运行 Kotlin中的代码1和代码2有什么不同?谢谢 代码1 data class ForecastList(val id: Long, val city: String, val country: String, val dailyForecast: List<Forecast>) { val size: Int get() = dailyForecast.size op

代码1来自一个示例项目,我修改了一些代码并将其更改为代码2,代码2也可以正确运行

Kotlin中的代码1和代码2有什么不同?谢谢

代码1

data class ForecastList(val id: Long, val city: String, val country: String, val dailyForecast: List<Forecast>) {

    val size: Int
        get() = dailyForecast.size

    operator fun get(position: Int) = dailyForecast[position]
}
数据类预测列表(val id:Long,val city:String,val country:String,val dailyForecast:List){
val大小:Int
get()=dailyForecast.size
操作员乐趣获取(位置:Int)=每日预测[位置]
}
代码2

data class ForecastList(val id: Long, val city: String, val country: String, val dailyForecast: List<Forecast>) {

    val size: Int = dailyForecast.size

    operator fun get(position: Int) = dailyForecast[position]
}
数据类预测列表(val id:Long,val city:String,val country:String,val dailyForecast:List){
val大小:Int=dailyForecast.size
操作员乐趣获取(位置:Int)=每日预测[位置]
}

第一个将在构建时评估
dailyForecast.size
,将值存储在备份字段中,并创建一个访问器,返回此备份字段的值


第二个将不创建支持字段,而是创建一个访问器,返回表达式
dailyForecast.size
,每次获得
size

,第一个将评估
dailyForecast.size
在构造时,将值存储在支持字段中,并创建一个访问器,返回此支持字段的值


第二个字段不会创建支持字段,而是创建一个访问器,该访问器在每次获得
size

时都会返回表达式
dailyForecast.size
,请查看语法。查看语法。谢谢,你的意思是代码1将花费少量的系统资源吗?@HelloCW花费更多的资源可能取决于很多事情。例如,评估
dailyForecast.size
的成本有多高,以及您多久查看一次
ForecastList
size
?在大多数情况下,
dailyForecast.size
的评估成本可能很低,因此效率差异可以忽略不计——使用更清晰的代码(#2)。如果
dailyForecast.size
很昂贵,那么如果大部分时间
ForecastList.size
从未调用,则使用#1;如果
ForecastList.size
通常多次调用,则使用#2。(如果通常只调用一次,那么效率大致相同。)@HelloCW有时选择其中一个不是因为效率,而是因为所需的语义。例如,如果
dailyForecast.size
的值可以随时间变化,并且您希望
ForecastList.size
始终告诉您当前值,那么您需要使用#1。谢谢,您的意思是代码1将花费较小的系统资源吗?@HelloCW花费更多的资源可能取决于很多事情。例如,评估
dailyForecast.size
的成本有多高,以及您多久查看一次
ForecastList
size
?在大多数情况下,
dailyForecast.size
的评估成本可能很低,因此效率差异可以忽略不计——使用更清晰的代码(#2)。如果
dailyForecast.size
很昂贵,那么如果大部分时间
ForecastList.size
从未调用,则使用#1;如果
ForecastList.size
通常多次调用,则使用#2。(如果通常只调用一次,那么效率大致相同。)@HelloCW有时选择其中一个不是因为效率,而是因为所需的语义。例如,如果
dailyForecast.size
的值可以随时间变化,并且您希望
ForecastList.size
始终告诉您当前值,那么您需要使用#1。