Drools - 规则语法

正如您所见,.drl(规则文件)有自己的语法,让我们在本章中介绍部分规则语法。

规则中的条件

规则可以包含许多条件和模式,例如 −

  • Account (balance == 200)
  • Customer (name == "Vivek")

上述条件检查帐户余额是否为 200 或客户名称是否为"Vivek"。

规则中的变量

Drools 中的变量名称以美元符号 ($) 开头。

  • $account − Account( )
  • $account 是 Account() 类的变量

Drools 可以处理所有原生 Java 类型,甚至枚举。

规则中的注释

特殊字符 # 或 // 可用于标记单行注释。

对于多行注释,请使用以下格式:

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

全局变量

全局变量是分配给会话的变量。它们可用于以下各种原因 −

  • 用于输入参数(例如,可在会话之间自定义的常量值)。

  • 用于输出参数(例如,报告 - 规则可以将一些消息写入全局报告变量)。

  • 可在规则内使用的服务(例如日志记录)的入口点。

规则中的函数

函数是一种便利功能。它们可用于条件和后果。函数代表实用程序/帮助程序类的替代方案。例如,

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

方言

方言指定条件或结果中的任何代码表达式中使用的语法。它包括返回值、求值、内联求值、谓词、显着性表达式、结果等。默认值为 Java。Drools 目前支持另一种称为 MVEL 的方言。可以在包级别指定默认方言,如下所示 −

package org.mycompany.somePackage
dialect "mvel"

MVEL 方言

MVEL 是一种用于基于 Java 的应用程序的表达式语言。它支持字段和方法/getter 访问。它基于 Java 语法。

显著性

显著性是规则语法的一个非常重要的特性。冲突解决策略使用显著性来决定首先触发哪条规则。默认情况下,它是主要标准。

我们可以使用显著性来定义触发规则的顺序。显著性有一个属性,它接受任何返回 int 类型数字的表达式(正数和负数均有效)。值越高,冲突解决策略越有可能选择触发规则。

salience ($account.balance * 5)

默认的显著性值为 0。我们在仅为某些规则分配显著性值时应牢记这一点。

规则语法中还有许多其他功能/参数,但我们在此仅介绍了重要的功能/参数。

规则后果关键字

规则后果关键字是规则的"then"部分中使用的关键字。

  • Modify − 事实的属性可以在规则的 then 部分进行修改。

  • Insert −根据某些条件,如果为真,则可以将新事实插入规则引擎的当前会话中。

  • Retract − 如果规则中的特定条件为真,并且您不想对该事实采取任何其他行动,则可以从规则引擎中撤回该特定事实。

注意 − 在规则结果中包含条件逻辑(if 语句)被认为是一种非常糟糕的做法。大多数情况下,应该创建新规则。