簡易関数電卓JsCalc - Java

 先日、JavaJavaScriptのeval()関数を呼び出す関数を作ったので、ついでに、簡易関数電卓を作ってみました。(^_^;

●JsCalc.java

import javax.script.*;
import java.util.Scanner;

class JsCalc {                                        // JsCalc.java [java]
    static ScriptEngineManager factory = new ScriptEngineManager();
    static ScriptEngine engine = factory.getEngineByName("JavaScript");

    // JavaでJavaScriptのeval()関数を呼び出す
    static String sEval(String sExpr) {
        String sScript="with(Math){"+sExpr+"}";       // 「Math.」を省略可能にするため
        try{
            return( engine.eval(sScript).toString() );
        }
        catch(NullPointerException e){               // 関数定義でエラー防止
            return(sExpr);
        }
        catch(Exception e){
            return("error: "+e);
        }
    }

    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        defUserFunc();                               // ユーザー定義関数の設定
        System.out.println("簡易関数電卓 JsCalc");
        for(;;){                                     // 無限ループ
            System.out.print("> ");
            String sExpr = stdIn.nextLine();         // 1行分の文字列を読み込む
            if(sExpr.equalsIgnoreCase("@Q")) break;  // 無限ループの出口:「@Q」で終了
            System.out.println(" "+sEval(sExpr));    // 表示
        }
    }

    // ユーザー定義関数の設定
    static void defUserFunc() {
        String sScript="";
        sEval("function radians(x){return(x/180*PI);}");
        sEval("function degrees(x){return(x/PI*180);}");
        sEval("function sinDeg(x) {return(sin(radians(x)));}");
        sEval("function cosDeg(x) {return(cos(radians(x)));}");
        sEval("function tanDeg(x) {return(tan(radians(x)));}");
        // 長文用
        sScript = "function sum(a){var s=0;"
                + "for(var i=0; i< a.length; i++) s+=a[i];"
                + "return(s);}";
        sEval(sScript);
        // 後はご自由に追加してください。
        
    }
}

※参考URL
以前、出題したプログラムクイズをJavaに翻訳してみた。
簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java
簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java (2)
簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java (3)
簡易関数電卓JsCalcWを改良してみた。
簡易関数電卓JsCalcWを改良してみた。(2)

P.S.
 ちなみに、ユーザー定義関数の設定は、次の様にしてもよいです。(^_^;

    radians = function(x){return(x/180*PI);}

●マンガでわかるJavaプログラミング [単行本] 柳井 政和 (著)

マンガでわかるJavaプログラミング

マンガでわかるJavaプログラミング

●鉛筆パズルゲームプログラミング ナンバープレース・お絵かきパズル・ナンバークロスワードアルゴリズム [大型本] 棚床 弘樹 (著)

●プログラムを作ろう!Java入門 [大型本] 古金谷 博 (著) 藤尾 聡子 (著) 鳥居 隆司 (著)
プログラムを作ろう!  JAVA入門

プログラムを作ろう! JAVA入門

●簡単・便利 Javaサンプルプログラム集 [単行本] 林 正幸 (著)

簡単・便利 Javaサンプルプログラム集

簡単・便利 Javaサンプルプログラム集

リバーシアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) [単行本] Seal Software (著)

Java将棋のアルゴリズムアルゴリズムの強化手法を探る (I・O BOOKS) [単行本] 池 泰弘 (著)

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)

●ゲームのアルゴリズム 改訂版 思考ルーチンと物理シミュレーション [単行本] 橋口 ゆうすけ (著)

ゲームのアルゴリズム 改訂版 思考ルーチンと物理シミュレーション

ゲームのアルゴリズム 改訂版 思考ルーチンと物理シミュレーション