2016-08-09 37 views
1

Ich lerne, wie man MATLAB GUI's programmiert und verwende GUIDE. Ich bin neugierig, was als bessere Praxis angesehen wird: Verwenden der MATLAB-Funktion 'set()' zum Bearbeiten einer Objekteigenschaft oder einfach des Punktoperators zum Bearbeiten der Objekteigenschaft.MATLAB GUI - Accessor-Methode oder Eigenschaft bearbeiten? Was ist die beste Vorgehensweise?

Sagen Sie zum Beispiel, ich hatte eine editierbare Textbox. Das Tag dieses Textfelds ist 'string_fs'. Es gibt zwei Möglichkeiten, die ich gefunden habe, die Zeichenfolge dieses Objekts ändern: vs anderen

handles.string_fs.String = 'hello'; 

oder

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

Gibt es einen Nutzen von einer Methode?

+1

Aus Gründen der Lesbarkeit unempfindliche Fall, dass ich den Punkt Notation für einzelne Eigenschaft bevorzugen und 'Set' /' get' für mehrere Eigenschaften. Auf der anderen Seite, wenn ich Rückwärtskompatibilität in Betracht ziehen muss, ist 'set' /' get' der richtige Weg, da die Punktnotation zuerst langsam in '2014b' hinzugefügt wurde. – Skogsv

+0

Es könnte sehr kleine Leistungsunterschiede geben, aber im Allgemeinen würde ich @Skogsv Ratschläge folgen: Treffen Sie Ihre Wahl zwischen Lesbarkeit und Rückwärtskompatibilität. – Hoki

Antwort

2

Dies ist in erster Linie eine persönliche Präferenz es sei denn Sie Code schreiben müssen, die in pre-HG2 Versionen von MATLAB arbeiten (vor R2014b), in dem Fall, dass Sie müssten set und get verwenden, die Abwärtskompatibilität zu erhalten.

Hier sind ein paar andere Vorteile zu set mit und get Methoden:

Manipulation von mehreren Objekten gleichzeitig

Sie können ein Array von Objekten oder Griffe und eine Eigenschaft auf alle gleichzeitig ändern

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'}) 

Sie etwas ähnliches mit Punktnotation tun kann, aber ich denke, es ist ein bisschen weniger lesbar ist

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

Ändern mehrerer Eigenschaften gleichzeitig

Sie können in einer Aussage, die Werte mehrerer Eigenschaften ändern, die ich denke, mit Lesbarkeit helfen und Ihren Code präzise zu halten.

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

Wie in den Kommentaren von @Hoki ausgeführt, ist dies besonders wichtig, wenn Sie Eigenschaften aktualisieren, die voneinander abhängig sind. Zum Beispiel das Modifizieren der XData und YData eines Plots, wo beide die gleiche Größe haben müssen.

So folgt aus:

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

Statt dessen:

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 

Programmatically Get Mögliche Werte

Mit Punktnotation können Sie Tabulatorvervollständigung verwenden, um eine Liste der möglichen zu erhalten Werte; Sie können dies jedoch programmgesteuert mit set tun, indem Sie einfach keinen Wert angeben.

possible = set(axes, 'FontWeight') 

% 'normal' 
% 'bold' 

Verkürzte und Groß- und Kleinschreibung Eigenschaften

Ich empfehle nicht, diese nächsten zwei verwenden, aber sie sind möglich mit set und get.

Mit den set und get Methoden, die Sie müssen nicht bieten einen gesamten Eigenschaften Namen, gerade genug, um Buchstaben, die es einzigartig ist.

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

Auch wenn set und get verwendet wird, ist der Name der Eigenschaft

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

ein anderes Beispiel, in dem Sie 'set' verwenden müssen, ist, wenn Sie mehrere Eigenschaften in derselben Anweisung ** ändern müssen (andernfalls kann Matlab eine Anpassung auslösen). Dies kann zum Beispiel häufig vorkommen, wenn Sie die 'FaceColor'-Eigenschaft eines Grafikobjekts von' 'flach' 'in' 'interp' 'ändern (wenn Sie nicht gleichzeitig die FaceVertexCData-Eigenschaft zuweisen, gibt Matlab eine Warnung aus und stoppt Wiedergabe). Ein häufiges Vorkommen ist auch, wenn Sie den "min", "max" und/oder "current" Wert eines Sliders verändern wollen (wenn der neue 'max' Konflikt mit dem alten' min' ist), etc ... – Hoki

+0

@ Hoki Großartiger Punkt. Ich habe ein wenig dazu beigetragen. – Suever

+0

Ha ha ... Ich habe ein paar komplizierte Beispiele genommen, um es zu illustrieren, und Sie haben den häufigsten Grund angegeben (was der größte Grund ist, warum ich auch 'set' benutze). Gut gemacht! – Hoki