JRuby - Sự kết hợp của java và ruby
Bài đăng này đã không được cập nhật trong 3 năm
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
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
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à
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}"
All rights reserved