MATLAB GUI - 访问器方法或 属性 编辑?什么是最佳实践?

MATLAB GUI - Accessor method or property edit? What's best practice?

我正在学习如何对 MATLAB GUI 进行编程并且正在使用 GUIDE。我很好奇什么被认为是更好的做法:使用 MATLAB 'set( )' 函数编辑对象 属性,或者简单地使用点运算符编辑对象 属性.

例如我有一个可编辑的文本框。这个文本框的标签是'string_fs'。我发现有两种方法可以更改此对象的字符串:

handles.string_fs.String = 'hello';

set(handles.string_fs, 'String', 'hello');

一种方法与另一种方法相比有什么好处吗?

这主要是个人喜好除非您需要编写适用于 HG2 之前版本的 MATLAB(R2014b 之前)的代码,在这种情况下您需要使用 setget 以保持向后兼容性。

以下是使用 setget 方法的其他一些优势:

同时操作多个对象

您可以拥有一组对象或句柄,并同时更改所有对象或句柄的 属性

ax(1) = subplot(1,2,1);
ax(2) = subplot(1,2,2);

% Change the font weight of both axes object to be the same
set(ax, 'FontWeight', 'bold')

% Change the font weight to be different for each
set(ax, {'FontWeight'}, {'bold'; 'normal'})

你可以用点符号做类似的事情,但我认为它的可读性稍差

[ax.FontWeight] = deal('bold');

同时更改多个属性

您可以在一条语句中更改多个属性的值,我认为这有助于提高可读性并保持代码简洁。

set(ax, 'FontSize', 20, 'FontWeight', 'bold', 'FontName', 'arial')

正如@Hoki 在评论中指出的那样,如果您正在更新相互依赖的属性,这一点尤为重要。例如修改绘图的 XDataYData,它们都需要具有相同的大小。

所以这个:

hplot = plot(1, 1);
set(hplot, 'XData', rand(10, 1), 'YData', rand(10, 1))

而不是这个:

hplot = plot(1, 1);

set(hplot, 'XData', rand(10, 1))
% Plot won't render here

set(hplot, 'YData', rand(10, 1))
% Plot will be able to render

以编程方式获取可能的值

使用点表示法,您可以使用制表符完成来获取可能值的列表;但是,您可以使用 set 以编程方式执行此操作,只需不提供值即可。

possible = set(axes, 'FontWeight')

%   'normal'
%   'bold'  

缩短且不区分大小写的属性

我不建议使用接下来的两个,但可以使用 setget

使用 setget 方法,您不必提供 完整的 属性名称,只需提供足够的字母即可使其独一无二。

set(ax, 'FontW', 'bold')

此外,当使用 setget 时,属性 名称不区分大小写

set(ax, 'fontweight', 'bold')