Passer au contenu principal
Administrator Guide
Dernière mise à jour : 2023-06-23
Concept : principes de base MVEL

Concept : principes de base MVEL

Syntaxe

MVEL est un langage d’expression pour les applications Java. Sa syntaxe est similaire à celle de Java, mais elle comporte quelques ajouts qui la rendent plus efficace pour mettre le contenu en correspondance.
Remarque :
  • MVEL utilise des espaces de noms et des classes Java, mais ne peut pas les déclarer lui-même.
  • Contrairement à Java, MVEL est saisi de manière dynamique, avec une saisie optionnelle.
  • Les expressions MVEL peuvent être des énoncés uniques ou des scripts sur plusieurs lignes. Pour les scripts sur plusieurs lignes, utilisez un point-virgule pour séparer chaque énoncé.
  • MVEL fonctionne selon le principes de la dernière valeur sortie. Il prend en charge la
    return
    mot-clé, mais ne l’exigent généralement pas.
  • MVEL prend en charge les règles de priorité des opérateurs et utilise le crochet pour contrôler l'ordre d'exécution.
  • Vous pouvez placer les chaînes de caractères MVEL entre des guillemets simples ou doubles.
  • Le point-virgule est un caractère réservé dans MVEL. Vous ne pouvez pas l'utiliser dans les expressions. Utiliser
    (char) 59
    à la place. Exemple :
    props['string']='a;b'
    lance une erreur. Ce code ne fait pas :
    props['string']= (char) 59 props['string_new']='a'props['string']'b'
Les expressions MVEL peuvent inclure :
  • Expressions booléennes
  • Invocations de modes
  • Expressions de propriété
  • Affectations de variables
Exemple d’une expression de propriété MVEL simple :
context.errorMessage
Il extrait la propriété
errorMessage
à partir de la variable ou de l'objet de contexte
context
.
MVEL prend en charge tous les opérateurs habituels de comparaison, mathématiques et logiques Java. Ce tableau résume les autres opérateurs MVEL importants :
Opérateur
Description
Exemple
new
Inscute un objet.
new String("foo")
with
Permet d'effectuer plusieurs opérations sur une seule instance d'objet.
with (value) { name = 'Foo', age = 50, sex = Sex.MALE }
assert
Affirme qu’une valeur est vraie ou qu’elle échoue avec une Erreur d’assertion.
assert foo != null
contains
Détermine si la valeur de gauche contient la valeur de droite.
var contains "Foo"
is
ou
instance of
Détermine si la valeur de gauche est membre de la classe de droite.
var instanceof String
strsim
Compare les chaînes et renvoie leur similitude exprimée en pourcentage.
"foobol" strsim "foobar"
soundslike
Effectue une comparaison coselles entre deux chaînes de caractères.
"foobar" soundslike "fubar"
&
Effectue une opération ET au débit binaire.
foo & 5
|
Effectue une opération OU au débit binaire.
foo | 5
^
Effectue une opération XOR dans le code d'écriture binaire.
foo ^ 5
+
Opérateur surchargé pour la concaténation de 2 chaînes.
"foo" + "bar"
#
Concaténation de deux littéraux sous forme de chaînes.
8 # 9
in
Contrôle les objets d’une collection.
(foo in list)
=
Affecte une valeur à une variable.
var = "foobar"

Test de valeur

En Java, l’opérateur
==
vérifie si les références pointent vers le même objet. Cependant, dans la fonction MVEL, l’opérateur de comparaison
==
vérifie si les valeurs sont égales. L'expression MVEL
foo == 'bar'
est l’équivalent de Javas
foo.equals("bar")
.
Exemple d’une expression booléenne MVEL :
user.name == 'John Smith'
Il retourne
true
si
name
propriété de la variable ou de l'objet de contexte
user
est John Smith.
MVEL utilise une contrainte de type. Si vous comparez deux (2) valeurs de types différents, MVEL tente de contraindre la valeur de droite au type de gauche. Si ce n’est pas possible, il tente de contraindre la valeur de gauche au type de droite. Exemple :
"123" == 123;
Cette expression renvoie
true
, car la valeur à droite est définie comme une chaîne avant d'effectuer la comparaison.

Listes, mappages et tableaux

Mettez les listes MVEL entre crochets. Séparez les éléments par des virgules. Exemple :
["Paris", "London", "Berlin"]
Mettez les mappages MVEL entre crochets. Séparez les clés et les valeurs par des deux points. Exemple :
["Foo" : "Bar", "Bar" : "Foo"]
Mettez les tableaux MVEL entre crochets. Séparez les éléments par des virgules. Exemple :
{"Bill", "Bob", "Ben"}

Navigation dans les biens

MVEL fournit une syntaxe unique et unifiée pour accéder aux propriétés, aux champs statiques, aux listes, aux mappages et aux tableaux.
En Java, vous pouvez accéder à une propriété d’un objet à l’aide de l’énoncé suivant :
context.getException().getCause()
Dans MVEL, vous pouvez accéder à la même propriété à l’aide de l’expression suivante :
context.exception.cause
Accéder aux listes et aux tableaux de la même manière. Exemple :
parts[2]
Vous accédez aux mappages de la même manière que les tableaux, mais vous pouvez transmettre n’importe quel objet en tant que valeur d’index. Exemple :
props["foobar"]
Si une mappe utilise une chaîne comme clé, vous pouvez traiter la map elle-même comme un objet virtuel. Exemple :
props.foobar
Pour l'indexation, la fonction MVEL traite les chaînes comme des tableaux.
Cet exemple retourne
B
:
foo = "Berlin"; foo[0];

Affectation

Vous pouvez affecter des variables dans une expression MVEL pour une utilisation au sein de l’expression ou pour une extraction au moment de l’exécution.
Le MVEL étant un langage à saisie dynamique, il n’est pas nécessaire de spécifier un type lors de la déclaration d’une nouvelle variable. Toutefois, vous pouvez le faire.
Les deux exemples suivants sont valides dans MVEL :
str = "Some string"; String str = "Some string";
Lors de l'affectation d'une valeur à une variable type, MVEL tente d'effectuer une conversion automatique de type. Exemple :
String num = 1;
Vous pouvez transtyper la valeur d’une variable de type dynamique en un autre type. Exemple :
String num = 1;

Section : Fractionnement etentrée des heures

MVEL utilise un typage dynamique, avec un typage statique optionnel. Les objets Java d’origine sont typés de manière statique. Pour interagir avec eux, MVEL doit parfois effectuer une contrainte de type, ce qui peut avoir des répercussions sur le rendement.
MVEL impose automatiquement le type qui semble le mieux adapté à la valeur actuelle. Cela signifie que vous devez être prudent lorsque vous travaillez avec des nombres. Des erreurs peuvent survenir dans l'arithmétique à virgule flottante, car la fonction MVEL effectue automatiquement un calcul à partir d'une précision infinie
java.math.BigDecimal
à
java.lang.Double
et
java.lang.Long
. Cela peut entraîner des problèmes lorsque le type de valeur stockée ne correspond pas à vos attentes. En général, vous devez éviter d’effectuer des opérations arithmétiques non entières avec des valeurs financières dans MVEL.
La contrainte de type de MVEL signifie que vous pouvez faire appels à des modes Java sans ajuster les données entrantes. Le programme d’interprétation ou le compilateur analyse les types que vous transmettez au mode et identifie la coercition nécessaire.
En cas de conflit de type de tableau, MVEL tente de contraindre le tableau entier à utiliser le type d’entrée nécessaire.
MVEL effectue toute coercition nécessaire sur une variable saisie de manière statique, à condition que la valeur affectée soit coercible. Si ce n’est pas le cas, une exception se produit.