Android 什么';在Kotlin中使用单个表达式fun和var有什么区别?

Android 什么';在Kotlin中使用单个表达式fun和var有什么区别?,android,kotlin,Android,Kotlin,我在调试Kotlin中的一个问题,我发现下面这行代码的行为与我们期望的不一样:“当我们处于连接状态时总是返回true” var isConnected=connectionState==connectionState.CONNECTED 将上面的行更改为这一行解决了问题 fun isConnected()=connectionState==connectionState.CONNECTED 有人能解释一下这两种方法在Kotlin中的区别吗?如果有的话。 谢谢 我希望这可能是解决办法 让我们考虑当

我在调试Kotlin中的一个问题,我发现下面这行代码的行为与我们期望的不一样:“当我们处于连接状态时总是返回true”

var isConnected=connectionState==connectionState.CONNECTED

将上面的行更改为这一行解决了问题

fun isConnected()=connectionState==connectionState.CONNECTED

有人能解释一下这两种方法在Kotlin中的区别吗?如果有的话。
谢谢

我希望这可能是解决办法

让我们考虑当连接状态没有连接时声明变量 试着用那个布尔值,它是假的


但是,当您使用单表达式fun时,它将根据当前连接状态返回布尔值

这是对Fares Hussain答案的一个小补充

评估也可以推迟到需要该值时进行

 var foo = "B"

 val result: Boolean by lazy {   
    "A" == foo
 }

 foo = "A"

 println(result)   // true 
例如:

 val isConnected: Boolean by lazy {
     connectionState == ConnectionState.CONNECTED
 } 
这(您的代码)在类初始化时初始化属性一次

var isConnected = connectionState == ConnectionState.CONNECTED
这为属性提供了一个getter,因此每次使用它时都会像调用函数一样调用它:

val isConnected: Boolean get() = connectionState == ConnectionState.CONNECTED
我个人总是把getter放在下一行,让它更明显:

val isConnected: Boolean
    get() = connectionState == ConnectionState.CONNECTED

如果您将此设置为
var
,您还必须提供一个setter,否则它将只是为一个您从未使用过的支持字段设置一个值。

感谢您的回复。你是说isConnected var的值只分配一次,不会根据connectionState的值而改变吗?是的,如果我是正确的,你可以在使用函数之前创建
var
,谢谢你提到这种方法!非常感谢您提及此方法!