Sinatraのあらかると

記録することで、環境構築で悩まない。

混在するコードは、どうみえますか。

 前回は、サンプルコードの写経的に動作確認をしました。それにより、JRubyJavaで動いていることが確認できました。それで胸熱です。今度は、ハローワールドからさらに進んで、JRubyでクラスをかいて特異メソッドを宣言し文章を出力してます。JRubyで1~10までの数字をeachメソッドを使ってカウントしてます。さらにJavaでSystemから文章を出力してみました。これにより、Java内でJRubyを動作することができています。どうですか、混在するコードをきれいだとみるか、わかりにくいと見るかは人それぞれですが、私にはきれいに見えます。Javaで書くところはJavaで標準に、JRubyで書くところはJRubyで書きましょうという話です。はい。

 この方法を使えば、JavaRubyの両方のよさを使いできることの範囲が増えるように想います。もともと、Rubyだけで書くことに限界を感じていました。テキスト処理に強いRubyですが、不得手なことも使っていると見え隠れします。Cが書けないので治しようがないこともしばしば。そんなときに、この方法ならば試しながら言語とスクリプトを併用できるので便利じゃないですか。しかし、出来ないこともあるでしょう。それは、追々。

 ブログの記事なのでシンプルなコード。可能性を感じます。

追記:セミコロンで区切らない内容をコメントで追加したよ。

追記:finally節を追加したよ。

/**
 * @author Takayuki Kamiyama
 *
 */

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Echos {

    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("jruby");

        try {
            //JRubyのコードはこちらに書く
            engine.eval("(1..10).each { |e| print e ;print ' '}");
            engine.eval("puts ''");
            engine.eval("class Sample;def Sample.naruto; puts '~~この文章はJRubyです~~'; end; end; Sample.naruto");
        } catch (ScriptException e) {
            //JRubyのエラーを捕捉する
            e.printStackTrace();
        } finally{
            //必ず実行されるjavaコード
            System.out.println("~~この文章はJavaです~~");
        }
    }
}

/**
 * engine.eval("JRuby内コード") ;で区切らない内容
 * (1..10).each do |e|
 * print e
 * print ' '
 * end
 *
 * class Sample
 * def Sample.naruto
 * puts '~~この文章はJRubyです~~'
 * end
 * end
 * Sample.naruto
 */

実行結果

1 2 3 4 5 6 7 8 9 10 
~~この文章はJRubyです~~
~~この文章はJavaです~~

Copyright © 2007-2017 Takayuki Kamiyama. All Rights Reserved.