MATLAB: Calling a function defined in a m-file from within appdesigner app, with the app object as function input

appdesigner

I'm using R2019b.
I have created a GUI app using appdesigner and have written the function testFun in a m-file (testFun should also be usable by a non GUI approach, hence the m-file).
Within the app, I have declared a public property called someData:
properties (Access = public)
someData = '';
end
From within the GUI app, testFun is called with app as a function argument:
testFun(app)
testFun is defined as follows:
function testFun(inputData)
inputData.someData = 'hello world';
end
As you can see, there are no output arguments defined in testFun.
Yet when I run the app like this, the someData property gets the value 'hello world'.
How can this behavior be explained?

Best Answer

Your GUI (like all AppDesigner GUIs) has a pass-by-reference behavior (so it behaves like a handle class). That means the line you show modifies the original object, instead of creating a new one when the function is called.
You could create a GUI that doesn't work this way by using the normal figure class, so what is generally meant by a 'programmatic GUI', or GUIs created with GUIDE. For an overview of your options for GUI design, see this. For more information about pass-by-reference vs pass-by-value, see Comparison of handle and value classes in the documentation.
Related Question