Sandra
Sandra

Reputation: 45

Difference between member function and property

What is the difference?

val isFinished: Boolean
        get() = actor.actions.size == 0
fun isFinished() = actor.actions.size == 0

I have no idea.

I expect them to be the same.

Upvotes: 0

Views: 338

Answers (2)

s1m0nw1
s1m0nw1

Reputation: 81949

Class Property

Your first example is a class property:

class MyClass {
    val isFinished: Boolean
        get() = actor.actions.size == 0
}

This property defines an (optional) explicit get method, often referred to as a "getter". You could also omit the getter and do:

class MyClass {
    val isFinished: Boolean = (actor.actions.size == 0) //parens not necessary
}

If omitted, as shown in the last example, the value will rather be a constant value which isn't re-calculated on each access. Both variants serve different use cases but in most cases, the latter will be sufficient.

Regardless, for a client of this class, the property can be accessed like this:

val mc = MyClass()
mc.isFinished

This shows accessing a property in Kotlin.


Class member function

Functions in Kotlin can also define functions, which can be referred to as member functions. Your second example demonstrates this feature:

class MyClass {
    fun isFinished() = actor.actions.size == 0
}

Defining a member function is similar to properties with explicit getters but still different for a client, since they have to invoke a function rather than accessing a property:

val mc = MyClass()
mc.isFinished()

Side Note

Note that the shown function utilizes an expression body which is equivalent to the following block body approach:

class MyClass {
   fun isFinished() { 
       return actor.actions.size == 0
   }
}

Learn more about functions here.

Upvotes: 1

Rene
Rene

Reputation: 6248

The first statement defines a property and the second statement defines a method. Assume you define both in a class Foo.

val foo = Foo()
if(foo.isFinished) {} // property

if(foo.isFinished()) {} // method - see () at invocation

Under the hood, both variants call a function.

Upvotes: 3

Related Questions