高质量编码--易变业务使用脚本语言编写

本文是阅读了《编写高质量代码 改善Java程序的151个建议》后学习理解后进行的产出,同样是为了方便我后面的回顾。

废话不多说,开始。

脚本语言是在运行期解释执行的,这种特性正是Java所缺少的,java是一种编译解释的语言,在进行修改后,就需要重新编译,才能实现修改的内容。

脚本语言的优点:灵活,便捷,简单。通过引入脚本语言可以使Java更加强大。

先上代码

import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class CountByJS {
    public static void main(String[] args) throws FileNotFoundException, ScriptException, NoSuchMethodException {
        // 获取JavaScript执行引擎
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        // 建立上下文变量
        Bindings bind = engine.createBindings();
        bind.put("factor", 1);
        // 绑定上下文,作用于是当前引擎范围
        engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);
        Scanner input = new Scanner(System.in);
        while (input.hasNext()){
            int a = input.nextInt();
            int b = input.nextInt();
            System.out.printf("输入的参数:%s,%s\n",a,b);
            // 执行js代码
            engine.eval(new FileReader("d:\\count.js"));
            // 是否可调用方法
            if (engine instanceof Invocable){
                Invocable in = (Invocable) engine;
                // 执行js中的函数
                Double result = (Double) in.invokeFunction("count", a, b);
                System.out.printf("运算结果:%s\n",result.intValue());
            }
        }
    }
}

JS代码如下所示

function count(a,b){
    return a + b;
}

此时我们可以调用JS的函数计算两数之和,而我们此时将JS函数的内容修改为return a - b;再次输入两个数进行计算,得出的就是两数之差了,是不是很神奇~

这本书是我的师傅推荐给我的,也推荐大家看看,对日后的编码还是挺有帮助的。一起学习,一起进步

原文地址:https://www.cnblogs.com/lwhblog/p/12588181.html

时间: 2024-08-06 17:51:41

高质量编码--易变业务使用脚本语言编写的相关文章

提高java编程质量 - (一)易变业务使用脚本语言编写

脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比较简单,易学 另外:java6以上默认支持JavaScript 例子: package com.test; import java.io.FileNotFoundException; import java.io.FileReader; import javax.script.Bindings; i

L脚本语言编写的简单数学函数库

对于一种编程语言数学计算的功能当然是必不可少的,通过L脚本语言的基本数学运算功能实现数学计算库也很简单 在L脚本语言中,使用库之前需要进行导入,这和C语言的include引用Java的导入jar包是类似的 下面的例子是一个L脚本语言的库文件 #scplib #数学函数库 定义:函数,求圆的周长,半径 开始:函数,求圆的周长 计算:算式,ret,2*3.14*半径 显示:ret 结束:函数,求圆的周长 定义:函数,求圆的面积,半径 开始:函数,求圆的面积 计算:算式,ret,3.14*(半径*半径

javascript高质量编码01

javascript的浮点数: Javascript的数字都是双精度浮点数: 64位编码数字: 能表达53位精度的整数: 进行位运算时会隐式地转化为32位整数(0,1序列)后计算: 浮点数运算可能会有精度问题,最好是都用整数计算: 严格模式:考虑到兼容性问题,可以用将自身包裹在立即调用的函数表达式里再连接其他文件:

javascript高质量编码03

使用Object的直接量实例构造轻量级的字典: 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环:(考虑到兼容性,如Array.prototype是允许增加属性的): 防止原型污染: 使用null,Object.create:  var a = Object.create(null);

javascript高质量编码04

库和API的设计: 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名: 将undefined看作没有值而不要表示非特定的值: 在允许0,空字符串等为有效参数的地方,不要通过真值测试(||)来实现参数默认值: 使用//var x === undefined ? 0 : x; 接受多参数对象的时候可以选用选项对象: 在处理多个预设值的时候可以用extend function extend(target, source) { if(sour

expect脚本语言编写

什么是expect expect是基于tcl的相对简单的一个免费的脚本编程工具语言,用来实现自动和交互式任务程序进行通信,无须人手工干预,比如ssh ftp 等,这些程序正常情况下都需要手工与他们进行交互,而使用expect就可以模拟人手工交互的过程,实现自动的和远端的程序交互,从而到达自动化的目的 expect程序工作流程 expect的工作流程可以理解为,spawn启动进程----->expect期待关键字----->send向进程发送字符------>退出结束 安装expect软件

[ 转 ]编写高质量代码:改善Java程序的151个建议

记得3年前刚到公司,同桌同事见我无事可做就借我看<编写高质量代码:改善Java程序的151个建议>这本书,当时看了几页没上心就没研究了.到上个月在公司偶然看到,于是乎又找来看看,我的天,真是非常多的干货,对于我这种静不下心的人真是帮助莫大呀. 看完整本书,也记了不少笔记,我就分享一部分个人觉得有意义的内容,也为了方便以后自己温习. --警惕自增陷阱 i++表示先赋值后自增,而++i表示先自增后赋值.下面的代码返回结果为0,因为lastAdd++有返回值,而返回值是自增前的值(在自增前变量的原始

转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

阅读目录 建议16:易变业务使用脚本语言编写 建议17:慎用动态编译 建议18:避免instanceof非预期结果 建议19:断言绝对不是鸡肋 建议20:不要只替换一个类 回到顶部 建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:

编写高质量JAVA程序代码的建议

--------------------------------------------------------------------------------------------------- 前言:原著<改善JAVA程序的151个建议>有151个建议,我在拜读的过程根据自己的理解合并了其中的几个,并将每个建议的核心要义进行了一次纯手工提炼,以方便想阅读这本书的同行能够更快的掌握这本书的所有核心内容. -------------------------------------------