[Func] Déclarer Vos Variables Automatiquement

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Func] Déclarer Vos Variables Automatiquement

#1

Message 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
 
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Func] Déclarer Vos Variables Automatiquement

#2

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] Déclarer Vos Variables Automatiquement

#3

Message 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é. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Func] Déclarer Vos Variables Automatiquement

#4

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] Déclarer Vos Variables Automatiquement

#5

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Func] Déclarer Vos Variables Automatiquement

#6

Message 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.
Répondre