WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Saubere Variablenübergabe und Codeaufbau?

 

moongoblin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2011, 09:43     Titel: Saubere Variablenübergabe und Codeaufbau?
  Antworten mit Zitat      
Eine relativ allgemeine Frage:
Ich bin kein Programmierspezialist und auch bei Matlab erst seit einigen Wochen dabei.
Nach meinem Kenntnisstand ist es aber sinnvoll den Code eines umfangreichen Programms in Einzelskripte/Funktionen aufzuteilen, die dann aus dem Hauptskript aufgerufen werden. Zwecks Übersichtlichkeit, späteren Veränderungen etc.
Bei einer über guide programmierten GUI ist der dazugehörige Code darüber hinaus ja sowieso schon in verschiedene Callback-Funktionen unterteilt, die bei "Nutzung" des jeweiligen GUI-Elements ausgeführt werden.

Ich habe nun regelmäßig Probleme bei der Übergabe von Variablen. Sowohl zwischen den Callbackfunktionen, als auch wenn ich aus einer dieser ein ausgelagertes Skript aufrufen will.

Nach meinem Verständnis läuft es so:
Zwischen den Callback-Funktionen ist die Übergabe nötiger Variablen über die handles-Struktur möglich, d.h. ich speichere z.B. die Variable test unter handles.test, bestätige mit guidata(hObject, handles), dann kann ich sie in einer anderen Funktion über die handles wieder aufrufen, also test=handles.test. Ohne die handles würde der Zugriff auch innerhalb des Skripts einer GUI nicht funktionieren, richtig? (siehe Code)

Code:

function A_Callback(hObject, eventdata, handles)
...
test=5;
handles.test=test;
guidata(hObject, handles);


function B_Callback(hObject, eventdata, handles)
...
test=handles.test;
probe=test+signal;
...
 


Wenn ich jetzt aus einer Callbackfunktion des Hauptskripts ein ausgelagertes Skript aufrufen will, muss ich die Variablen in der Callbackfunktion "aus den handles holen" und dann an das Skript übergeben, richtig? (siehe code) Geht das noch einfacher? Manchmal wird das was ich übergeben müsste so viel, dass es einfacher ist die Berechnung doch im Hauptskript durchzuführen. Aber das macht es eben sehr unübersichtlich. Das Ergebnis des externen Skripts müsste ich dann in der Callback-Funktion des Hauptskripts wieder in den handles speichern um es weiterverwenden zu können, richtig?

Code:

function C_Callback(hObject, eventdata, handles)
...
test=handles.test;
probe=handles.probe;
ergebnis=ext_funktion(test, probe); %Funktionsaufruf
...
handles.ergebnis=ergebnis;
guidata(hObject, handles);
 


Sorry für den langen Beitrag. Es geht mir darum zu wissen: ist mein Verständnis richtig, mache ich irgendwas falsch oder umständlich? Es funktioniert zwar immer irgendwie, aber es scheint mir so als ob Übersichtlichkeit, Zugriffszeiten und Speicherverwendung noch optimierbar wären.

Vielen Dank für Tipps und Hinweise!
Private Nachricht senden Benutzer-Profile anzeigen


sword_warrior
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2011, 09:31     Titel: Re: Saubere Variablenübergabe und Codeaufbau?
  Antworten mit Zitat      
moongoblin hat Folgendes geschrieben:

Code:

function C_Callback(hObject, eventdata, handles)
...
test=handles.test;
probe=handles.probe;
ergebnis=ext_funktion(test, probe); %Funktionsaufruf
...
handles.ergebnis=ergebnis;
guidata(hObject, handles);
 



Ich arbeite zwar auch noch nicht so lange mit Matlab, aber spontan würde ich diesen Weg nehmen:
Code:

function C_Callback(hObject, eventdata, handles)
handles=ext_funktion(handles); %Funktionsaufruf
guidata(hObject, handles);
 

Und dann in der aufgerufenen Funktion mit handles.test, handles.probe etc. weiterarbeiten (die Resultate dann unter handles.ergebnis) und das gesammte handles struct zurückgeben.

Korrigiert mich, wenn ich falsch liege...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.