Cours complet sur ATL (ATLAS Transformation Language) : quelques trucs et astuces sur les expressions
Dans l'article précédent :
https://www.urbanisation-si.com/cours-complet-sur-atl-atlas-transformation-language-les-expressions-declaratives-dans-ocl-atl
nous avion abordé les énumérations ATL. Voyons à présent quelques trucs et astuces sur les expressions.
Quelques trucs et astuces sur les expressions
Les langages issus de la grande famille du “C” (C++, Java, C#, JavaScript, …), possèdent un optimiseur d’expression booléenne. Par exemple l’évaluation s’arrête quand le 1er membre est vrai et l’opérateur suivant est un or ou bien encore quand le 1er membre est false et que l’opérateur est un and.
Ce n’est pas la cas dans OCL. Toutes les expressions seront entièrement évaluées.
Parconséquent certaines expressions à priori correctes généreront une erreur dans ATL !
Exemples :
not person.oclIsUndefined() and person.name = 'Isabel'
Cette expression génère bien une erreur dans ATL dans le cas ou person n’est pas défini, une erreur est générée à l’évaluation de person.name.
Pour être certain de n’avoir aucune erreur :
if person.oclIsUndefined()
then
false
else
person.name = 'Isabel'
endif
Idem avec un or :
person.oclIsUndefined() or person.name = 'Isabel'
Pour être à l’abri d’erreurs comme précédemment :
if person.oclIsUndefined()
then
true
else
person.name = 'Isabel'
endif
Autre exemple :
collection->select(person | not person.oclIsUndefined() and person.name = 'Isabel')
La bonne solution pour être tranquille :
collection->select(person |
if person.oclIsUndefined()
then
false
else
person.name = 'Isabel'
endif
)
Plusieurs solutions existent, en voici une 2ème :
collection
->select(person | not person.oclIsUndefined())
->select(person | person.name = 'Isabel')
En terme de performance la 1ère solution est préférable à la 2ème car l’itération sur la collection est effectuée qu’une seule fois.
"Faites ce que vous aimez, pensez ce que vous ressentez et vivez de la façon dont vous voulez."
Santosh Kalwar
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
A découvrir aussi
- Ingénierie Dirigée par les Modèles (IDM) : tutoriel ATL (ATLAS Transformation Language), concevez les métamodèles avant de passer aux choses sérieuses
- Ingénierie Dirigée par les Modèles (IDM) : tutoriel Eclipse Ecore, le corps à corps avec les méta modèles
- Ingénierie Dirigée par les Modèles (IDM) : cours complet sur ATL (ATLAS Transformation Language) : les types ATL
Inscrivez-vous au site
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 782 autres membres