|
|
Wann eine Variable der handle Struktur zuweisen |
|
Sebx |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2017, 08:04
Titel: Wann eine Variable der handle Struktur zuweisen
|
|
Moin moin,
habe mal eine Frage bezüglich der Handles Struktur.
Wenn ich z.B. x=5 von einer callback function an eine andere übergeben möchte, habe ich das z.B. so gemacht:
Theoretisch könnte ich doch aber auch nur mit handles arbeiten, d.h.:
Gibt es dabei Vor- bzw. Nachteile, abgesehen davon den Code schlanker zu halten, oder ist das reine Geschmackssache?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.09.2017, 09:31
Titel:
|
|
Hallo,
In beiden Fällen ist zu beachten, dass mit dem Ergebnis von x*2 in beiden Fällen nichts weiter gemacht wird.
Durch den guidata-Befehl am Ende gibt es einen entscheidenden Unterschied: wenn du in deinem Code
x = ...
stehen hättest, würde das außerhalb des Callbacks keinen Effekt haben. Wenn du dagegen
handles.x = ...
schreibst, dann steht das veränderte x durch den guidata-Befehl auch in anderen Callbacks zur Verfügung.
Grüße,
Harald
|
|
|
Sebx |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2017, 10:34
Titel:
|
|
Danke für die schnelle Antwort aber diesen Teil hatte ich schon verstandeb. Das Beispiel war jetzt nicht so gut gewählt. Mir ging es darum, ob ich handles.x, nachdem es in die handles Struktur übergeben wurde, im interessierenden Callback erst wieder einer Variablen zuordnen sollte oder direkt mit x.handles arbeiten sollte.
Variante 1: x=handles.x und dann x*2
oder gleich
Variante 2: handles.x*2
Wenn x häufiger im Callback verwendet werden würde, bräuchte man mit der ersten Variante das "handles." nicht immer wieder schreiben und braucht weniger Zeichen.
Beides würde wohl zum gleichen Ergebnis führen aber ich wollte jetzt wissen, ob noch irgendetwas im Hintergrund.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 30.09.2017, 15:55
Titel:
|
|
|
|
|
Hallo Sebx,
Das kommt darauf an, was Du genau möchtest. Falls die Laufzeit eine rolle spielt, kann dies ein Unterschied machen:
Im ersten Fall wird pro Iteration 3 mal ein Struct referenziert. Vermutlich wird Matlab JIT Accelerator vielleicht 2 Referenzierungen daraus machen, aber das ist nicht sicher. Das Referenzieren von Structs benötigt jedenfalls Rechenzeit. Deshalb ist die zweite Methode schneller. Wenn Du "schneller" messen willst, lohnt sich das nur mit dem realen Code, nicht mit diesem trivialen Beispiel.
Neben der Laufzeit spielt aber auch die Zeit zum Programmieren und Debuggen eine Rolle. Ich finde "y = y + x" viel besser lesbar und würde es darum auf jeden Fall bevorzugen. Darüber hinaus würde ich es aber in produktivem Code grundsätzlich anders schreiben: Es hat viele Vorteile den Code für die Berechnungen vom GUI zu trennen. Also:
Das hat den Vorteil, dass man das GUI einfach modifizieren kann, oder bei Bedarf die Berechnungen aus einer anderen Funktion aufrufen kann. Wenn man z.B. die Funktion automatisch testen will oder als Batch-Mode mit tausenden unterschiedlichen Inputs aufrufen will, ist es extrem unpraktisch, dass über das GUI zu tun.
Regel: Trenne Daten, Berechnungen und GUI so klar und deutlich, wie möglich.
Gruß, Jan
|
|
|
Sebx |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2017, 16:27
Titel:
|
|
Vielen Dank für die Erklärung. Ich werde Deinen Rat befolgen.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|