"set" VS "=" assignment
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
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')
Risposta accettata
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
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Whos in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!