Variable deklarieren - isdeclared

  • Hallo,

    (A)

    Script A ruft Script B über include auf.

    Im Script A ist eine Variable nicht deklariert. Also läuft das Script B in einen Fehler:

    "Variable used without being declared"

    Wie kann ich im Script B den Fehler abfangen, ohne dass das Programm beendet wird und im Fehlerfalle die Variable in Script B belegen?

    (im Prinzip der gleiche Grundaufbau wie untenstehendes Script 1 und 2, nur dass in Script 1 Zeile 2 auskommentiert ist.

    (B)

    Ich verstehe isdeclared nicht.

    Script 1

    AutoIt
    #include "Variable 02.au3"
    Global $test 
    _test_()


    Script 2


    Wo liegt mein Fehler? Wenn eine Variable als global deklariert wurde, sollte sie dann nicht auch als solche in Script 2 als deklariert erkannt werden? Laut Hilfe - ja "Überprüft, ob eine Variable deklariert wurde." ...

    Falls das die falsche Syntax sein sollte, welche ist bessser, um festzustellen, ob es die Variable gibt?

    Danke :)

    2 Mal editiert, zuletzt von AutoMit (6. April 2016 um 18:11)

  • Hi,

    Das Beispiel aus der Hilfe zeigt ganz gut wie man es verwendet, die Variablen werden als String ohne "$" übergeben


    https://autoit.de/onlinehilfe/functions/IsDeclared.html


    Edit:

    Wie kann ich im Script B den Fehler abfangen, ohne dass das Programm beendet wird und im Fehlerfalle die Variable in Script B belegen?

    Ist es nicht Sinniger, das man die Variable einfach gleich in das Script A schreibt?
    Ich habe bisher noch nie einen Grund gesehen diese Funktion zu benützen, normalerweise sollte es keinen Zeitpunkt im Programm geben
    an dem es unklar ist ob eine Variable existiert oder nicht, oder?


    mfg,
    Zeitriss

    Einmal editiert, zuletzt von Zeitriss (6. April 2016 um 18:44)

  • Ist es nicht Sinniger, das man die Variable einfach gleich in das Script A schreibt?

    da eine UDF imho nur Sinn macht wenn sie mehrfach verwendet wird, ist es am sinnvollsten die Variable in der UDF Global zu deklarieren. Genau so macht es Sinn diese ausgiebig zu testen, sprich das Thema ist an den Haaren herbeigezogen bzw zeugt von schlampigem Programmierstil.

  • Danke für Deine Tipps Zeitriss :) Ich probiere das gleich mal.

    und zu (A)

    ist es am sinnvollsten die Variable in der UDF Global zu deklarieren


    ... autoBert, wenn ich unveränderliche Werte wollte, hätte ich Konstanten genommen ...

    Da der Variableninhalt variabel ist (Beispiel Pausenzeit in ms) muss er im Script belegt werden und nur hilfsweise in der UDF, wenn aus welchem Grund auch immer, die Variable nicht belegt ist.

    Ich suche weiter eine Lösung für (A), weil ich wissen möchte, wie ich die Aufgabenstellung mit AutoIt lösen kann.

    Die Variableninhalte aus Script A sind z.B. Usereingaben und wenn der User die Eingabe nicht vorgenommen hat, ist die Variable nicht belegt.

  • Das kannst du zB lösen in dem du die Variable sehr wohl Global deklarierst (in der UDF) und sie zB am Anfang auf NULL setzt.
    Wenn die Variable beschrieben wird kriegt sie einen Wert ungleich NULL und somit musst du in der UDF nur schreiben "If( $Variable <> NULL ) Then ..."

    Edit: Zwei Leute ein Gedanke xD..kA wer jz schneller war

    • Offizieller Beitrag

    Die Variableninhalte aus Script A sind z.B. Usereingaben und wenn der User die Eingabe nicht vorgenommen hat, ist die Variable nicht belegt.

    Belege diese Variable bei der globalen Deklaration mit einem Wert, z.B. $var = Null und stze diese Variable nach jeder erfolgten Verwendung auf diesen Wert zurück. Dann kannst du jederzeit mit If $var = Null Then ; keine Usereingabe erfolgt arbeiten.

    EDIT: @CentuCore war ein paar Sekunden schneller :D

  • Du weist schon was Funktionen und Funktionsparameter sind? Angenommen du hast eine Funktion in der je nach Benutzereingabe eine variable Pause gemacht werden soll, zusätzlich möchest du einen Default Wert für die Pause haben, wenn vom Benutzer kein manueller Wert festgelegt wurde.

    Das löst man dann einfach über einen Funktionsparameter:

    Alles was man in eine separate Datei als Funktionssammlung (UDF) auslagert sollte nach Möglichkeit flexibel und variabel gehalten sein und nicht auf globale Variablen angewiesen sein. Im obigen Beispiel werden alle benötigten Variablen lokal in der Funktion erstellt und genutzt, daher kann die Funktion wie sie ist in beliebige anderen Scripte eingebunden werden ohne sich weiter Gedanken machen zu müssen. Genau so sollten deine Funktionen auch aussehen wenn du sie universal nutzen möchtest.

    2 Mal editiert, zuletzt von misterspeed (9. April 2016 um 14:00)

  • ... autoBert, wenn ich unveränderliche Werte wollte, hätte ich Konstanten genommen .

    ich sehe du mußt noch viel meh lernen als ich gedacht habe. Wenn ich von

    da eine UDF imho nur Sinn macht wenn sie mehrfach verwendet wird, ist es am sinnvollsten die Variable in der UDF Global zu deklarieren.

    Variablen rede meine ich Variablen und keine Konstanaten!

    Zitat von Merksatz

    Eine Variable heißt Variable weil ihr variable Werte zugewiesen werden können. Nicht zu verwechseln mit einer Konstante, hier würde eine 2. Wertzuweisung einen Fehler erzeugen. Eine Konstante heißt also Konstante weil die 1. Wertzuweisung unwiederruflich ist!

    Einmal editiert, zuletzt von autoBert (9. April 2016 um 22:00)