JRuby: Java e Ruby insieme

29 giugno 2009

Può capitare che nel bel mezzo di un porting di un’applicazione da Java a Ruby ci si renda conto della mancanza del binding di una libreria. La soluzione breve è rinunciare, quella geek è iniziare a scriversi il porting della libreria, quella pratica è continuare a utilizzare la libreria Java con JRuby.

In questo articolo vedremo dunque come utilizzare delle classi Java all’interno di applicazioni Ruby usando l’implementazione JRuby. Il modo più semplice per provarlo è quello di scaricare una versione recente di NetBeans. L’IDE della Sun utilizza di default, per il supporto al linguaggio Ruby, proprio JRuby.

Classi Java in Ruby

Iniziamo con un semplice esempio che mostra come utilizzare delle classi Java, come ad esempio la classe Random, direttamente da un applicazione Ruby. Da Netbeans creiamo un nuovo progetto Ruby e scegliamo JRuby come “Ruby platform”.

Figura 1. Selezionare la piattaforma JRuby

Selezionare la piattaforma JRuby su NetBeans
Fatto questo possiamo iniziare a scrivere il codice includendo il modulo Java
include Java

e istanziando un oggetto della classe java.util.Random

rnd = java.util.Random.new

Possiamo ora utilizzare i metodi di Random per generare dei numeri casuali, ad esempio:

puts rnd.nextInt
puts rnd.nextLong
puts rnd.nextFloat
puts rnd.nextDouble
puts rnd.nextGaussian

In alternativa è anche possibile utilizzare la direttiva import

import java.util.Random
rnd = Random.new

oppure utilizzare include_class che permette anche di indicare degli alias, ad esempio

include_class 'java.util.Random' do |pkg,name|
    "JRandom"
end

in quest’ultimo caso un oggetto di tipo java.util.Random va creato utilizzando il nome JRandom

rnd = JRandom.new

Gli alias sono utili soprattutto quando c’è conflitto tra i nomi delle classi Ruby e quelle Java. Un ulteriore meccanismo consiste nel creare un modulo ad-hoc e utilizzare include_package

module JavaUtil
    include_package 'java.util'
end

rnd = JavaUtil::Random.new

Nell’esempio il modulo JavaUtil contiene tutto il package java.util e non solo la classe Random. Una piccola curiosità, i nomi Java sono convertiti automaticamente anche in stile Ruby, ad esempio è possibile riscrivere il primo esempio in questo modo:

include Java
rnd = java.util.Random.new

puts rnd.next_int
puts rnd.next_long
puts rnd.next_float
puts rnd.next_double
puts rnd.next_gaussian

Anche i path vengono convertiti in stile Ruby, ad esempio i due percorsi seguenti sono equivalenti:

java.util.Random        # stile Java
Java::JavaUtil::Random  # stile Ruby

ovvero vengono rimossi i punti, viene usato lo stile CamelCase per i nomi e il tutto viene messo nel package Java. Un esempio più esplicativo è quello relativo alla classe ParserFactory:

org.xml.sax.helpers.ParserFactory      # stile Java
Java::OrgXmlSaxHelpers::ParserFactory  # stile Ruby

Se vuoi aggiornamenti su JRuby: Java e Ruby insieme inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su JRuby: Java e Ruby insieme

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy