"set" VS "=" assignment

3 visualizzazioni (ultimi 30 giorni)
Robin L.
Robin L. il 5 Mar 2019
Commentato: Robin L. il 8 Mar 2019
Hello !
I am writing about the two assignment methods : "set function" and "= operator". For example let's take a small code that maximize my App Designer window :
app.UIFigure.WindowState = 'maximized';
% OR
set(app.UIFigure, 'WindowState', 'maximized');
I am wondering in terms of performance/speed, what is best way to proceed ?
Thank you !
  3 Commenti
Rik
Rik il 5 Mar 2019
As a further remark: you can use something similar with object notation.
clc
f=figure(1);
try
prop='Name';
f.(prop)='xyz';
catch ME
disp(ME.message)
end
Another upside to object notation is that you can make a longer sequence:
parentobj.childobj.someprop='value';
%versus
child=get(parentobj,'childobj');
set(child,'someprop','value')
%or shorter, but less readable:
set(get(parentobj,'childobj'),'someprop','value')
Robin L.
Robin L. il 8 Mar 2019
Thank you so much Rik Wisselink !

Accedi per commentare.

Risposta accettata

Rik
Rik il 5 Mar 2019
The set syntax is older than the object notation.
The advantages of the set syntax are that you can use it in older Matlab releases, you have more flexibility in how to assign property names, and that you can use incomplete names and incorrect capitalization.
To show the flexibility, try running this:
clc
f=figure(1);
set(f,'nam','abc')%stupid, but it still works
try
f.nam='foo';
catch ME
disp(ME.message)
end
try
f.name='bar';
catch ME
disp(ME.message)
end
However, this does come at the price of some performance: set seems to be about twice as slow, depending on the task. Below you find a tester that shows the performance for two simple tasks. The timings are a bit misleading, because graphics updates will be machine/OS depedent and will introduce more lag. This extra lag should be the same for either syntax.
%open 100 figures for testing
clc,close all
handles=cell(1,100);
for n=1:size(handles,2)
handles{n}=figure('Name','abc','Position',[0.2 0.2 0.2 0.2]);
end
%measure the time it takes to modify the title and the position properties
%first for the set syntax
tic
for n=1:n
set(handles{n},'Name','foo')
set(handles{n},'Position',[0.3 0.3 0.2 0.2])
end
t_set=toc;
%now with object notation
tic
for n=1:n
handles{n}.Name='bar';
handles{n}.Position=[0.1 0.1 0.2 0.2];
end
t_obj=toc;
close all
fprintf(['set syntax takes about %.2f ms per iteration,\n',...
'object notation takes about %.2f ms per iteration\n'],...
t_set*1000/n,t_obj*1000/n)
This returns this on my machine:
set syntax takes about 0.19 ms per iteration,
object notation takes about 0.10 ms per iteration
  1 Commento
Robin L.
Robin L. il 8 Mar 2019
Thank you so much Rik Wisselink !
I didn't find something in the official documentation. Thank to you ;)

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by