Gambas France BETA


Pas de compte ? Incription

Du bon usage de la Fonction Eval()

1
AuteurMessages
O.Coquet#1 Posté aujourd'hui à 14:08:29
Ce qui n'est pas devra-t-être inventéCette fonction très puissante est assez mal documentée voici donc une version d'exemple un peu plus simple à comprendre:

Le but de cette fonction est d'évaluer (interpréter) une chaine de caractères (string) comme si c'était une ligne de code.

elle prend deux paramètres:

une variable String qui contient la ligne de code
Une variable collection qui contient des "pseudo variables"

premier exemple, celui de la doc Gambas revisité pour être plus clair.

1
2
3
4
5
6
DIM Context AS NEW Collection

Context["X"] = 2
Context["Y"] = 5

PRINT Eval("X * Y)", Context)


La valeur affichée sera 10

Second exemple, beaucoup plus intéressant, imaginons que nous ayons un contrôle mon_textarea sur notre formulaire FMain

1
2
3
4
5
6
DIM Context AS NEW Collection

Context["X"] = "un joli texte"


Eval("Let Fmain.mon_textarea.text = X", Context)


Le textarea contiendra désormais "un joli texte"

A cela deux conditions:

Let doit être précisé dans le cas d'une assignation (=) dans la chaîne de caractères.
Le chemin du contrôle concerné doit être complet "Fmain.mon_textarea.text".

Dans la pratique, on peut simplifier à l’extrême cette dernière façon d'utiliser éval() en écrivant la ligne comme ceci:

1
Eval("Let Fmain.mon_textarea.text = \"mon joli texte\"", NULL)


Plus de variable, plus de contexte ! :D

Si vous avez plusieurs lignes à évaluer, rajoutez un \n entre chaque ligne:
1
Eval("Let Fmain.mon_textarea.text = \"mon joli texte\"\n Let mavariable = 10", NULL)


Avec ces exemples, la fonction peut paraitre superflue, mais imaginez un formulaire avec 23 boutons s'appelant respectivement btn1,btn2,...btn23.

Changer la couleur de fond de tous ou quelques boutons peut paraitre fastidieux, avec eval() on crée une chaine puis une variable à incrémenter et le tour est joué, voici l'exemple...

1
2
3
4
5
FOR i AS INTEGER = 1 TO 23

Eval("Let Fmain.btn" & i & ".Background = &hFF0000", NULL)

NEXT


et le tour est joué !

A noter, cette fonction est une entrée directe vers l'auto programmation puisqu'un programme peut générer lui même ses lignes de programme et les exécuter, un bon début pour une IA......

Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4
Quelques autres "vieux" ordinateurs !