《Drools7.0.0.Final规则引擎教程》第4章 Function函数

Function函数

首先来看一下function函数的语法结构图:

函数是将语义代码放置在规则文件中的一种方式,就相当于java类中的方法一样。函数并不会比辅助类做更多的事情,实际上,编译器会在幕后生成助手类。使用函数的好处是可以将业务逻辑集中放置在一个地方,根据需要可以对函数进行修改。但它既有好处也有坏处。函数对于调用规则的后果部分操作是最有用处的,特别是只有参数变化但执行的操作完全相同时。这里的函数可以对照java中方法的抽取封装来理解。

典型的函数声明如下所示:

function String hello(String name) {
    return "Hello "+name+"!";
}

实例规则代码如下:

package com.rules

function String hello(String name){
    return "Hello " + name + "!";
}

rule helloSomeone

    agenda-group "function-group"

    when
        eval(true);
    then
        System.out.println(hello("Tom"));
    end

测试代码如下:

@Test
    public void testFunction(){
        KieSession kieSession = this.getKieSession("function-group");
        int count = kieSession.fireAllRules();
        kieSession.dispose();
        System.out.println("Fire " + count + " rule(s)!");
    }

执行结果:

Hello Tom!
Fire 1 rule(s)!

需要注意的是,function虽然不是java的一部分,但是依然可以在这里使用。函数的参数根据需要可以有一个,也可以有多个,也可以没有。返回结果的类型定义和正常的java语法没有区别。

前面我们已经讲过如何引入java中的静态方法,此处的function也可以用静态方法来代替,具体使用参考相关章节,这里就不再赘述。

后语

此系列课程持续更新中,QQ群:593177274,欢迎大家加入讨论。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding

vue.js过滤器的基本使用

1065
来自专栏微信公众号:Java团长

理解Java的三大特性之封装

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据...

852
来自专栏java学习

Java每日一练(2017/8/16)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习...

2586
来自专栏java学习

Java每日一练(2017/7/15)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●答案公布时间:为每期发布题目的第二天 ★【新...

3227
来自专栏Java面试笔试题

GC是什么?为什么要有GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象...

765
来自专栏腾讯IVWEB团队的专栏

你可能不知道的 ECMAScript 2016 的变化(英译)

与 ECMAScript 6(也称为ECMAScript 2015)相比,ECMAScript 2016 是对 JavaScript 语言规范的一个小更新。 ...

1670
来自专栏后端沉思录

回调函数

什么是回调函数,上面的问题说的是不是很空洞,不是太形象,下面是知乎上的一位网友给的答案:

772
来自专栏机器学习从入门到成神

设计模式之静态工厂、工厂方法和抽象工厂的联系与区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

682
来自专栏Golang语言社区

【Go 语言社区】golang channel 有缓冲 与 无缓冲 的重要区别

golang channel 有缓冲 与 无缓冲 是有重要区别的 我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是...

5408
来自专栏Jimoer

Java设计模式学习记录-适配器模式

之前已经将五个创建型设计模式介绍完了,从这一篇开始介绍结构型设计模式,适配器模式就是结构型模式的一种,适配器要实现的效果是把“源”过渡到“目标”。

761

扫码关注云+社区