12/08/2018, 10:02

JRuby - Sự kết hợp của java và ruby

JRuby là gì? nó có liên quan gì đến Ruby không? JRuby là một trình thông dịch Ruby đầy đủ được viết bằng ngôn ngữ Java và có thể chạy trong một máy ảo Java (JVM). Không giống như Ruby chính thức, JRuby cho phép bạn gọi các kịch bản lệnh Ruby từ bên trong mã Java, cũng như gọi các API Java từ bên ...

JRuby là gì? nó có liên quan gì đến Ruby không?

JRuby là một trình thông dịch Ruby đầy đủ được viết bằng ngôn ngữ Java và có thể chạy trong một máy ảo Java (JVM). Không giống như Ruby chính thức, JRuby cho phép bạn gọi các kịch bản lệnh Ruby từ bên trong mã Java, cũng như gọi các API Java từ bên trong các kịch bản lệnh Ruby của bạn.

Cài đặt java 8

Trước khi cài đặt JRuby thì chúng ta cần phải tích hợp máy ảo Java. Các bước cài đặt java như sau:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Chú ý: bạn sẽ nhận được lời đề nghị chấp nhận giấy phép trước khi việc cài đặt thật sự bắt đầu UpKz5IL.png

Lựa chọn OK và nhấn Enter, sau đấy lựa chọn Yes và nhấn Enter Quá trình cài đặt này sẽ mất rất khá nhiều thời gian. Sau khi cài đặt ta có thể kiểm tra bằng câu lệnh

java -version

Và kết quả sẽ xuất hiện trên màn hình đồng nghĩa với việc bạn đã cài thành công java 8

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Server VM (build 25.45-b02, mixed mode)

Cài đặt JRuby

Một cách để cài đặt là download từ website: http://jruby.org/download về máy mã nguồn mở của jruby và tiến hành giải nén để cài đặt hoặc có thể cài đặt thông qua môi trường quản lý ruby như rvm hoặc rbenv. Còn tôi sử dụng rvm để cài đặt phiên bản mới nhất

$rvm install jruby

Sau khi cài đặt xong chúng ta sẽ phải mặc định sẽ chỉ sử dụng jruby bằng dòng lệnh

rvm use jruby

Để kiểm tra việc cài đặt hoàn tất ta chạy lệnh

jruby -v

Kết quả khi chạy thành công là

jruby 1.7.19 (1.9.3p551) 2015-01-29 20786bd on Java HotSpot(TM) Server VM 1.8.0_45-b14 +jit [linux-i386]

Demo chương trình chạy bằng JRuby

Và bây giờ chúng ta có thể chạy demo với ngôn ngữ JRuby Bạn vào truy cập vào thư mục đã có sẵn project rails và mở console bằng lệnh

rails console

Khi console đã mở thì ta chạy các câu lệnh kiểm tra sau:

>> require "java"
=> true
>> h = java.util.HashMap.new
=> {}
>> h.put(:foo, "bar")
=> nil
>> h.get(:foo)
=> "bar"

Một điều khác thú vị khác khi chúng ta sử dụng là Swing của java trong JRuby, công cụ dùng để tạo ra GUI trong java

>> javax.swing.JOptionPane.showMessageDialog(nil, "Hello world!")
=> nil

E376I01.png

Ngoài ra chúng ta có thể viết các câu lệnh jruby vào vào một file có đuôi .rb

    swing.rb

    require "java"
    java_import javax.swing.JFrame
    java_import javax.swing.JButton
    java_import javax.swing.JOptionPane

    class HelloWorld < JFrame
      def initialize
        super "Example"
        setSize(150, 100)
        setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
        setLocationRelativeTo(nil)
        button = JButton.new("Say Hello")
        add(button)
        button.addActionListener do |e|
          JOptionPane.showMessageDialog(nil, "Hello World")
        end
        setVisible(true)
      end
    end

    HelloWorld.new

Chúng ta tiếp tục chạy lệnh trên console

jruby swing.rb

Kết quả thu được là E376I02.png

Cuối cùng là chương trình tính dãy số fibonacci và đưa ra thời gian tính toán

    fib.rb

    def fib n
      n < 2 ? n : fib(n-1) + fib(n-2)
    end

    start = Time.now

    1.upto(5).map do |n|
      Thread.new { puts "Thread #{n}: #{sleep(0.5)}" }
    end.each(&:join)

    puts "Time: #{Time.now - start}"
0