Drools - Syntaxe des règles

Comme vous l'avez vu, le .drl (fichier de règles) a sa propre syntaxe, couvrons une partie de la syntaxe de règle dans ce chapitre.

Conditions dans les règles

Une règle peut contenir de nombreuses conditions et modèles tels que -

  • Compte (solde == 200)
  • Client (nom == «Vivek»)

Les conditions ci-dessus vérifient si le solde du compte est de 200 ou si le nom du client est «Vivek».

Variables dans les règles

Un nom de variable dans Drools commence par un symbole Dollar ($).

  • Compte $ - Compte ()
  • $ account est la variable de la classe Account ()

Drools peut fonctionner avec tous les types Java natifs et même Enum.

Commentaires dans les règles

Les caractères spéciaux, # ou //, peuvent être utilisés pour marquer des commentaires sur une seule ligne.

Pour les commentaires sur plusieurs lignes, utilisez le format suivant:

/*
   Another line
   .........
   .........
*/

Variables globales

Les variables globales sont des variables affectées à une session. Ils peuvent être utilisés pour diverses raisons comme suit -

  • Pour les paramètres d'entrée (par exemple, les valeurs constantes qui peuvent être personnalisées d'une session à l'autre).

  • Pour les paramètres de sortie (par exemple, la création de rapports - une règle peut écrire un message dans une variable de rapport globale).

  • Points d'entrée pour des services tels que la journalisation, qui peuvent être utilisés dans les règles.

Fonctions dans les règles

Les fonctions sont une fonctionnalité pratique. Ils peuvent être utilisés dans des conditions et des conséquences. Les fonctions représentent une alternative aux classes utilitaires / auxiliaires. Par exemple,

function double calculateSquare (double value) {
   return value * value;
}

Dialecte

Un dialecte spécifie la syntaxe utilisée dans toute expression de code qui est dans une condition ou dans une conséquence. Il inclut les valeurs de retour, les évaluations, les évaluations en ligne, les prédicats, les expressions de saillance, les conséquences, etc. La valeur par défaut estJava. Drools prend actuellement en charge un autre dialecte appeléMVEL. Le dialecte par défaut peut être spécifié au niveau du package comme suit -

package org.mycompany.somePackage
dialect "mvel"

Dialecte MVEL

MVEL est un langage d'expression pour les applications basées sur Java. Il prend en charge l'accès aux champs et aux méthodes / getter. Il est basé sur la syntaxe Java.

Saillance

La saillance est une caractéristique très importante de la syntaxe des règles. La saillance est utilisée par la stratégie de résolution de conflit pour décider quelle règle appliquer en premier. Par défaut, c'est le critère principal.

Nous pouvons utiliser la saillance pour définir l'ordre des règles de tir. La saillance a un attribut, qui prend toute expression qui renvoie un nombre de type int (les nombres positifs et négatifs sont valides). Plus la valeur est élevée, plus la stratégie de résolution de conflit aura de chances de déclencher une règle.

salience ($account.balance * 5)

La valeur de saillance par défaut est 0. Nous devons garder cela à l'esprit lorsque vous attribuez des valeurs de saillance à certaines règles uniquement.

Il y a beaucoup d'autres fonctionnalités / paramètres dans la syntaxe des règles, mais nous n'avons couvert que les plus importantes ici.

Mots-clés de conséquence des règles

Les mots clés relatifs aux conséquences des règles sont les mots clés utilisés dans le champ "then”Fait partie de la règle.

  • Modify - Les attributs du fait peuvent être modifiés dans le then partie de la Règle.

  • Insert - Sur la base d'une condition, si elle est vraie, on peut insérer un nouveau fait dans la session courante du moteur de règles.

  • Retract - Si une condition particulière est vraie dans une règle et que vous ne voulez rien agir d'autre sur ce fait, vous pouvez retirer le fait particulier du moteur de règles.

Note- Il est considéré comme une très mauvaise pratique d'avoir une logique conditionnelle (instructions if) dans une conséquence de règle. La plupart du temps, une nouvelle règle doit être créée.