Drools - Sintaxis de reglas

Como vio, el .drl (archivo de reglas) tiene su propia sintaxis, cubriremos parte de la sintaxis de las reglas en este capítulo.

Condiciones en las reglas

Una regla puede contener muchas condiciones y patrones como:

  • Cuenta (saldo == 200)
  • Cliente (nombre == "Vivek")

Las condiciones anteriores verifican si el saldo de la cuenta es 200 o el nombre del cliente es "Vivek".

Variables en reglas

El nombre de una variable en Drools comienza con un símbolo de dólar ($).

  • $ cuenta - Cuenta ()
  • $ cuenta es la variable para la clase Account ()

Drools puede trabajar con todos los tipos nativos de Java e incluso con Enum.

Comentarios en las reglas

Los caracteres especiales, # o //, se pueden utilizar para marcar comentarios de una sola línea.

Para comentarios de varias líneas, utilice el siguiente formato:

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

Variables globales

Las variables globales son variables asignadas a una sesión. Se pueden utilizar por varias razones de la siguiente manera:

  • Para parámetros de entrada (por ejemplo, valores constantes que se pueden personalizar de una sesión a otra).

  • Para los parámetros de salida (por ejemplo, informes: una regla podría escribir algún mensaje en una variable de informe global).

  • Puntos de entrada para servicios como el registro, que se pueden utilizar dentro de las reglas.

Funciones en reglas

Las funciones son una característica de conveniencia. Se pueden usar en condiciones y consecuencias. Las funciones representan una alternativa a las clases de utilidad / ayuda. Por ejemplo,

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

Dialecto

Un dialecto especifica la sintaxis utilizada en cualquier expresión de código que esté en una condición o en una consecuencia. Incluye valores de retorno, evaluaciones, evaluaciones en línea, predicados, expresiones de prominencia, consecuencias, etc. El valor predeterminado esJava. Drools actualmente admite un dialecto más llamadoMVEL. El dialecto predeterminado se puede especificar a nivel de paquete de la siguiente manera:

package org.mycompany.somePackage
dialect "mvel"

Dialecto MVEL

MVEL es un lenguaje de expresión para aplicaciones basadas en Java. Admite acceso a campos y métodos / captadores. Está basado en la sintaxis de Java.

Prominencia

La prominencia es una característica muy importante de la sintaxis de reglas. La prominencia es utilizada por la estrategia de resolución de conflictos para decidir qué regla disparar primero. Por defecto, es el criterio principal.

Podemos utilizar la prominencia para definir el orden de las reglas de disparo. La prominencia tiene un atributo, que toma cualquier expresión que devuelva un número de tipo int (los números tanto positivos como negativos son válidos). Cuanto mayor sea el valor, es más probable que se active una regla mediante la estrategia de resolución de conflictos.

salience ($account.balance * 5)

El valor de prominencia predeterminado es 0. Debemos tener esto en cuenta al asignar valores de prominencia solo a algunas reglas.

Hay muchas otras características / parámetros en la sintaxis de reglas, pero aquí solo hemos cubierto los importantes.

Palabras clave de consecuencia de la regla

Las palabras clave de consecuencia de la regla son las palabras clave que se utilizan en el "then”Parte de la regla.

  • Modify - Los atributos del hecho se pueden modificar en el then parte de la Regla.

  • Insert - Basado en alguna condición, si es verdadero, se puede insertar un nuevo hecho en la sesión actual del motor de reglas.

  • Retract - Si una condición particular es verdadera en una regla y no desea actuar de otra manera sobre ese hecho, puede retirar el hecho particular del motor de reglas.

Note- Se considera una muy mala práctica tener una lógica condicional (sentencias if) dentro de una consecuencia de regla. La mayoría de las veces, se debe crear una nueva regla.