En aparté de mon tutoriel sur la création d'un Casse-Brique et l'initiation en douceur à la POO, j'aborderai aujourd'hui le potentiel et la puissance des énumérations. Problématique : dès lors qu'un code source devient fourni, on retrouve très vite des valeurs numériques ou des chaines de caractères répétitives que l'on doit tester fréquemment. Exemple : dans le cas du jeu de casse-briques, admettons le cas de figure ou ma balle à des comportements exclusifs : CAS 1 : ma balle est une balle normale CAS 2 : ma balle est plus rapide CAS 3 : ma balle est traversante, elle ne rebondit pas et détruit tout sur son passage CAS 4 : ma balle est fourbe, elle change d'angle de manière imprévisible à chaque collision CAS 5 : etc ... Classiquement, un code pas très lisible (mais très courant admettons le) serait : Une version un peu plus lisible en serait : Mais QUID des cas complexes, lorsque vous avez plein de variables utilisant ce genre de numérotation ? LE code devient vite illisible, surtout lorsqu'on travaille en équipe, mais aussi en solo lorsqu'on revient plusieurs mois plus tard sur un ancien projet, et qu'on ne se souvient plus à quel numéro correspond quoi, ou pire, si le numéro existe, ou si l'on ne confond pas : SI (TypeBrique=12 Et TypeMissile=5) OU (TypeBrique=11 Et TypeRaquette=2 ALORS RENVOYER 1 SINON RENVOYER -2 FIN * * Toute ressemblance avec un paquet de nœud que vous trouveriez aussi dans votre propre code source est purement fortuite. Les énumérations à la rescousse : C'est à ce stade qu'interviennent les énumérations, qui répondent à plusieurs objectifs : - d'abord rendre le code beaucoup plus lisible - ensuite empêcher une valeur non déclarée d'être affectée. - enfin de disposer de certains automatismes "plutôt magiques" dans le code, et les assistants windev. Reprenons notre exemple de Type de Brique avec une énumération : Vous ne pouvez plus jamais vous tromper, car si j'essaye d'affecter une autre valeur que celles listées, windev me l'interdit : Note, vous n'êtes pas obligés d'attribuer des valeurs aux éléments de votre énumération, vous pouvez vous en tenir à gérer des noms abstraits. Puisque dans la plupart des cas, votre code n'aura besoin que de jongler avec des sémantiques, vous n'aurez donc plus à vous soucier de savoir à quel numéro correspond quoi. On peut donc écrire tout aussi bien : Dans ce contexte, windev attribue une valeur arbitraire à chaque élément, mais géré en interne, nous n'avons plus à nous en soucier. C'est utile pour gérer des concepts. Par contre si vous désirez que vos énumérations soient liées d'une certaine manière à un élément physique (numéro existant, nom de fichier sur disque, ou chaîne ayant un sens particulier dans votre conception métier, alors utilisez les affectations lors de la définition de vos Énumérations. Voici un autre exemple, via l'utilisation de valeurs de type "chaîne" : Usage des énumérations en paramètre d'une procédure, et au moment de renvoyer une valeur : Les énumérations sont aussi des types qui peuvent être exploités comme valeur de retour. Fini les chiffres illisibles ! Astuce : dans ce dernier cas de figure, et pourvu que vous ayez bien recompilé le projet une fois vos énumérations définies, l'assistant de code de windev vous mâche le travail lorsque vous saisissez SELON + une variable de type énuméré. Il génère le code de lui même tous les CAS, sans que vous ayez à les saisir. Essayez, c'est magique ! Il existe encore d'autres possibilités associées aux énumérations, mais elles sont un peu plus marginales, je vous renvoie donc à la documentation de PCSOFT, le but de ce tutoriel était de vous en faire comprendre la subtilité et l'utilité au quotidien. Limite des énumérations : on ne peut avoir qu'un seul état attribué simultanément. Autrement dit, votre livraison ne peut par exemple pas dans ce cas de figure être possible à la fois le Lundi et le Mardi. (pour reprendre l'exemple des jours ouvrables). Nous verrons dans un prochain tuto que pour gérer des cas multiples, un autre type de données peut s'avérer utile. Source : Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!