Bonjour, With: EndWith, c'est déjà bien.
Mais souvent ça n'enlève pas tout le temps perdu à retaper ses champs de structure quand on traite avec plusieurs structures. Or, on traite la plupart du temps avec plusieurs structures, et pas des moindres quand elles sont imbriquées sur de multiples étages...
Voici un code fictif pour constater la pratique.
Le but ne serait plus de chercher à imbriquer des With: EndWith mais à traiter avec un équivalent de With: EndWith comme on traiterait avec des balises. L'ordre d'imbrication n'aurait plus d'importance.
Cette balise "With" jouerait un rôle similaire à une macro temporaire.
Elle devrait donc comporter un nom d'usage et le préfixe usuel de champ de structure.
Le nom d'usage servirait à invoquer le préfixe de champ de structure attribué.
A la manière de
Code : Tout sélectionner
With StructureChampPrefixe
Code : Tout sélectionner
/StructureChampPrefixeNomUsuel= StructureChampPrefixe
Code : Tout sélectionner
EndWith
Code : Tout sélectionner
/StructureChampPrefixeNomUsuel
Je montre l'exemple en utilisant le caractère "/" (barre de division). C'est une hypothèse. Je la trouve possible puisque ça ne rentre pas en conflit avec la syntaxe actuelle du langage (la division par zéro n'existant pas, la double barre " .../ /StructureChampPrefixeNom\Champ... " indiquerait une division par une variable d'un champ de structure).
Le tout serait évidemment supplémentaire à With: EndWith.
Difficile à expliquer! Mais rudement simplificateur en pratique.
Code : Tout sélectionner
; Equivalents d'un "With multiple"
/Def = *Root\Desk\DefaultWindow
/Current = *Root\Desk\Window()
With /Current
; Usage
\X = /Def\X
\Y = /Def\Y
OpenWindow(#Pb_Any, \X, \Y, etc...)
EndWith
; Clôtures
/Def
/Current
Ici, l'exemple n'est pas flagrant: il n'y a que 2 champs x et y.
Mais quand on se tape la douzaine de champs répartis dans des structures de plusieurs étages (ça peut très vite aller loin en profondeur), on se rend très vite compte que c'est très très pratique.
Cerise sur le gateau: le compilateur obtient directement du programmeur des repères de référence pour optimiser à bloc les accès mémoire. Résultat:
Non seulement le programmeur construit plus facilement des usines à gaz en toute simplicité.
En plus, le compilateur possèderait des directives programmeur pour digérer la complexité desdites usines à gaz et donc ne rien perdre en performance...