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 之前)的代码,在这种情况下您需要使用 set
和 get
以保持向后兼容性。
以下是使用 set
和 get
方法的其他一些优势:
同时操作多个对象
您可以拥有一组对象或句柄,并同时更改所有对象或句柄的 属性
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 在评论中指出的那样,如果您正在更新相互依赖的属性,这一点尤为重要。例如修改绘图的 XData
和 YData
,它们都需要具有相同的大小。
所以这个:
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'
缩短且不区分大小写的属性
我不建议使用接下来的两个,但可以使用 set
和 get
。
使用 set
和 get
方法,您不必提供 完整的 属性名称,只需提供足够的字母即可使其独一无二。
set(ax, 'FontW', 'bold')
此外,当使用 set
和 get
时,属性 名称不区分大小写
set(ax, 'fontweight', 'bold')
我正在学习如何对 MATLAB GUI 进行编程并且正在使用 GUIDE。我很好奇什么被认为是更好的做法:使用 MATLAB 'set( )' 函数编辑对象 属性,或者简单地使用点运算符编辑对象 属性.
例如我有一个可编辑的文本框。这个文本框的标签是'string_fs'。我发现有两种方法可以更改此对象的字符串:
handles.string_fs.String = 'hello';
或
set(handles.string_fs, 'String', 'hello');
一种方法与另一种方法相比有什么好处吗?
这主要是个人喜好除非您需要编写适用于 HG2 之前版本的 MATLAB(R2014b 之前)的代码,在这种情况下您需要使用 set
和 get
以保持向后兼容性。
以下是使用 set
和 get
方法的其他一些优势:
同时操作多个对象
您可以拥有一组对象或句柄,并同时更改所有对象或句柄的 属性
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 在评论中指出的那样,如果您正在更新相互依赖的属性,这一点尤为重要。例如修改绘图的 XData
和 YData
,它们都需要具有相同的大小。
所以这个:
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'
缩短且不区分大小写的属性
我不建议使用接下来的两个,但可以使用 set
和 get
。
使用 set
和 get
方法,您不必提供 完整的 属性名称,只需提供足够的字母即可使其独一无二。
set(ax, 'FontW', 'bold')
此外,当使用 set
和 get
时,属性 名称不区分大小写
set(ax, 'fontweight', 'bold')