1 | |||||||||||
Auteur | Messages | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
O.Coquet | #1 Posté le 30/10/2024 à 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.
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
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:
Plus de variable, plus de contexte ! Si vous avez plusieurs lignes à évaluer, rajoutez un \n entre chaque ligne:
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...
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) Amitié Olivier (Alias Olinux) Raspberry pi 3 et 4, pc Xubuntu, Arduino..... Quelques autres "vieux" ordinateurs ! Et un bon fer à souder | ||||||||||
Patrick | #2 Posté le 31/10/2024 à 13:24:19 | ||||||||||
Bonjour, Effectivement la fonction Eval() est intéressante, pour voir une autre utilisation : https://github.com/PatrickMag/Laurux/blob/v3.69pat/.src/Utils/DB_Connection.class De la ligne 436 à 503 explication sur cette classe : Elle hérite de connection et sert à transformer certaines requêtes mysql en sqlitle, cette partie gère les requêtes préparées mysql, une requête préparée est une requête stockée sur le serveur avec possibilité d'utilisation de variables mysql, ces dernières sont censées être plus rapides que des requêtes envoyées depuis un poste de travail. Sqlite étant uniquement locale les requêtes préparées n'existent pas, il faut donc les transformer en requêtes normales. On a aussi beaucoup utilisé les expressions régulières dans cette classe. https://github.com/PatrickMag/Laurux/blob/v3.69pat/.src/Utils/LVar.class Cette classe servir uniquement a construire la collection context, avec par exemple les noms de colonne d'un fichier, et les mettre dans un tooltip. On s'en sert pour mettre en paramètre le nom d'un compte ou un n° de facture (au choix de l'utilisateur) dans des commentaires. Ce n'est pas moi qui est créé cette classe. Patrick | |||||||||||
1 |