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 语句)被认为是一种非常糟糕的做法。大多数情况下,应该创建新规则。