Page 1 sur 1

[Func] Déclarer Vos Variables Automatiquement

Posté : jeu. 10 sept. 2009 10:11
par timmalos
Cette fonction permet de déclarer en Global toutes les variables que vous avez oublié de déclarer. C'est utile par exemple avec un GuiOnEventMode. C'est très simple. Vous copiez la fonction tout en bas de votre script.
Puis Juste Après la déclaration de toutes vos variables, ou alors à la fin du script(il faudra alors patienter), vous appelez la fonction.

Il y a 2 Paramètres:
$AutoWrite = True : Va Ecrire en Dur les Variables Globales Dans le Script
$AutoWrite = False : Va Simplement Déclarer les variables manquantes, puis retourne 1. Utile Pendant un Developpement, pour ne pas declarer sans cesse les variables et tout faire à la fin.
$AutoSave , appelé uniquement si $AutoWrite = True, va, si il est en False Copier Dans le ClipBoard les globales. Le script se termine alors. Si il est en True, on va updater automatiquement le script: Ecriture des Globales, Auto Mise En Commentaire de l'appel de la fonction.

Voilà, je l'ai faite uniquement pour certains qui peuvent en avoir besoin souvent. Dites moi ce que vous en pensez.
Si quelqu'un veut faire la gestion d'erreur, n'hesitez pas.

Code : Tout sélectionner

Func create_all_undeclared($AutoWrite = True,$AutoSave = False)
    ;////////////////////////////////////////////////////////////
    ;Fonction crée par Timmalos
    ;Permet De Déclarer Vos Variables Si elles ne le sont pas déjà
    ;Si Le Paramètre $AutoSave Vaut True, Alors Le script sera enregistré,
    ;Puis réouvert avec Scite.
    ;////////////////////////////////////////////////////////////
    Local $glob = "Global "
    Local $ii = 0
    Local $texte = FileRead(@ScriptDir &"\"&@ScriptName)
    Local $array = StringRegExp($texte,"(\$(\w+).*?)+",3)
    For $i = 1 to Ubound($array) -1 Step 2
        IF Not IsDeclared($array[$i]) then
            If $ii >= 10 then
                $glob &= "$"&$array[$i]& @CRLF& "Global "
                $ii = 0
            Else
                $glob &= "$"&$array[$i]&","
                $ii += 1
            EndIf
            Assign($array[$i],"",2)
        EndIf
    Next
    If $AutoWrite = True Then
        If $glob =  "Global " then
            $glob = ""; Si Aucune Variable n'est à déclarer
        Else
            $glob = StringLeft($glob, StringLen($glob) - 1)
        EndIf
        If Not $AutoSave then
            ClipPut($glob)
        Else
            $texte = $glob & @CRLF & $texte
            $texte = StringReplace($texte,"create_all_undeclared(true)",";create_all_undeclared(true)")
            $texte = StringReplace($texte,"create_all_undeclared(1)",";create_all_undeclared(1)")
            $texte = StringReplace($texte,"create_all_undeclared(true,true)",";create_all_undeclared(true,true)")
        $texte = StringReplace($texte,"create_all_undeclared(true,1)",";create_all_undeclared(1,1)")
            Local $file = FileOpen(@ScriptDir &"\"&@ScriptName,2)
            FileWrite($file,$texte)
            ShellExecute(@ScriptDir &"\"&@ScriptName,"edit")
        EndIf
        Exit
    Else
        return 1
    EndIf   
EndFunc
 

Re: [Func] Déclarer Vos Variables Automatiquement

Posté : jeu. 10 sept. 2009 10:28
par timmalos
Exemples d'utilisation
Cette fonction a 2 manières d'être utilisée.
Soit
Pendant le développement de votre programme

Par exemple, afin de de Déclarer en Dur les Variables.
Utilisez alors
► Afficher le texteParamètres

Ou alors
Laisée dans le script quand il est terminé

Ici, la fonction aura un seul objectif, déclarer toutes les variables que vous avez oublié, afin d'empêcher des messages d'erreur à cause d'une mauvaise déclaration.
On mettra alors
► Afficher le texteParamètres

Re: [Func] Déclarer Vos Variables Automatiquement

Posté : jeu. 10 sept. 2009 18:04
par Tlem
Pas mal, mais si une variable est déclarée en local dans une fonction, alors elle se retrouve aussi déclarée en global ... Ce qui peut poser quelques petits désagréments.

Idem, si une variable est utilisée dans un script, mais que sa déclaration à été faite dans un include ...

Je conseil plutôt l'utilisation de ceci :

Code : Tout sélectionner

Opt("MustDeclareVars", 1)
Certes, c'est plus astreignant, mais c'est quand même mois risqué. ;)

Re: [Func] Déclarer Vos Variables Automatiquement

Posté : jeu. 10 sept. 2009 19:01
par timmalos
Bien sur, cette fonction n'est qu'une fonction de secours. Par contre:

Idem, si une variable est utilisée dans un script, mais que sa déclaration à été faite dans un include ...
Pour ca par contre, soit tu rejoins ta premiere idée (déclaration en local dans une fonction) et donc ca ne marche pas, soit la variable est declaree en globale dans l'include et là ma fonction le detecte.

Je pense que ca peut quand meme etre utile dans certains cas.

Re: [Func] Déclarer Vos Variables Automatiquement

Posté : jeu. 10 sept. 2009 22:15
par Tlem
Ce n'est pas tout à fait ce que je voulais expliquer.

Prend pour exemple, un script décomposé en trois parties.
Pourquoi trois parties ???
Tout simplement parce que ce fameux script utilises des fonctions communes mais deux codes différents.

Ont à donc :
- Un script X qui exécute un code qui fait une action X.
- Un script Y qui exécute un code qui fait une action Y.
- Un script Z qui contient des fonctions utilisées par X et Y.

Les variables du script Z (commun à X et Y) sont déclarée au début de Z mais ne peuvent êtres re-déclarée dans X ou Y ...
Je tiens à préciser que si on utilise Opt("MustDeclareVars", 1) dans X ou Y, les variables non déclarées dans le script lui-même seront affichée dans la console comme étant non déclarées et donc erreur ...
Mais on peut compiler quand même. ;)

Il est possible de faire toutes les déclarations au début de X et de Y, par contre, dans ce cas, pour chaque modification de Z, il faut mettre à jour les déclarations des deux scripts ... Ce qui n'est pas très pratique.
Et de toute façon, on retrouvera l'erreur de Scite sur les variables non déclarées dans le script. ;)

L'idéal de ton script, serait de vérifier si les variables ont été déclarées oui ou non, en local ou en global, y compris dans les includes ...
Mais cela dit, je comprend la portée du geste pour aider certains utilisateurs. :roll:

Re: [Func] Déclarer Vos Variables Automatiquement

Posté : ven. 11 sept. 2009 08:44
par timmalos
L'idéal de ton script, serait de vérifier si les variables ont été déclarées oui ou non, en local ou en global, y compris dans les includes ...
Ca doit être possible avec une belle regexp.