"Não há poder. Há um abuso do poder nada mais"
Nesse capítulo você aprenderá a acessar código escrito anteriormente em Java através de scripts escritos em Ruby: o projeto JRuby.
JRuby (http://www.jruby.org/) é uma implementação de um interpretador Ruby escrito totalmente em java, e mais ainda, com total integração com a Virtual Machine.
Além de ser open-source, ele disponibiliza a integração entre as bibliotecas das duas linguagens.
Atualmente há algumas limitações como, por exemplo, não é possível herdar de uma classe abstrata. O suporte a Ruby on Rails também não está completo.
Os líderes desse projeto open source já trabalharam na Sun, o que permitiu termos uma implementação muito rápida e de boa qualidade.
Vamos criar um script que imprima um simples "Testando o JRuby" na tela do seu console:
print "Testando o JRuby!\n"
Pode parecer muito simples, mas a grande diferença é que agora quem estará realmente rodando é uma Virtual Machine Java! Não há mais a necessidade de instalar o ruby na máquina, apenas a JVM e algumas bibliotecas do JRuby! Isto pode ajudar muito na adoção da linguagem.
Agora se executarmos tanto com os comandos "ruby" ou "jruby" o resultado será o mesmo:
Você chegou aqui porque a Caelum é referência nacional em cursos de Java, Ruby, Agile, Mobile, Web e .NET.
Faça curso com quem escreveu essa apostila.
Consulte as vantagens do curso Desenv. Ágil para Web com Ruby on Rails.
Crie um arquivo chamado testando.rb que imprime na tela "Testando o JRuby!":
print "Testando o JRuby!\n"
jruby testando.rb
Existe a possibilidade de compilarmos o arquivo .rb para um .class através do JRuby. Para isso devemos utilizar o jrubyc(JRuby Compiler) de modo muito semelhante ao javac:
jrubyc <path do arquivo .rb>
Vamos criar um arquivo ola_mundo_jruby.rb:
# ola_mundo_jruby.rb puts 'Ola Mundo com JRuby!'
Agora vamos compilar esse arquivo:
jrubyc ola_mundo_jruby.rb
Após isso, o arquivo ola_mundo_jruby.class já foi criado na mesma pasta do arquivo ola_mundo_jruby.rb e nós podemos utilizá-lo a partir de outro arquivo .rb através do require, porém esse .class é diferente do que o javac cria a partir do .java, sendo assim é impossível rodá-lo direto na JVM como rodamos outra classe qualquer do java.
Como foi dito anteriormente, não é possível executar diretamente na JVM um arquivo compilado pelo jruby, isso acontece pelas características dinâmicas do ruby que tornam necessário a utilização de um jar. Tal jar pode ser baixada no site do Jruby(http://jruby.org/download).
Com o .jar em mãos, é fácil executar um bytecode do jruby na JVM, simplesmente devemos utilizar a opção "-jar" da seguinte maneira:
java -jar <path do arquivo .jar> <path do arquivo .class>
Lembrando que é necessário que a extensão do arquivo(.class) esteja explícita.
Vamos copiar o arquivo .jar do jruby para a pasta onde o ola_mundo_jruby.class está e rodar o nosso olá mundo:
java -jar jruby.jar ola_mundo_jruby.class
Após isso veremos nosso "Ola Mundo com JRuby!".
Conheça a Casa do Código, uma nova editora, com autores de destaque no mercado, foco em ebooks (PDF, epub, mobi), preçosimbatíveis e assuntos atuais.
Com a curadoria da Caelum e excelentes autores, é uma abordagem diferente para livros de tecnologia no Brasil. Conheça os títulos e a nova proposta, você vai gostar.
Casa do Código, livros para o programador.
Para importar um bytecode que foi criado a partir de um arquivo .rb utilizamos o conhecido require.
require '<path do bytecode>'
Obs.: Lembre-se de retirar a extensão do arquivo (.class), o certo seria fazer algo como:
require 'app/funcionario'
e não:
# desta maneira o arquivo não será encontrado require 'app/funcionario.class'
Para importar classes Java utilizamos o método java_import, porém devemos ter o cuidado de antes requerer a biblioteca que tem esse método.
Vamos criar uma classe Pessoa em Java, e importar ela para dentro do JRuby. Primeiramente criaremos a classe Pessoa no java:
// Pessoa.java public class Pessoa { private String nome; public Pessoa(String meuNome) { this.nome = meuNome; } public void setNome(String novoNome) { this.nome = novoNome; } public String getNome(){ return this.nome; } public void seMostra(){ System.out.println(this.getNome()); } }
Agora vamos compilar o código fonte com o javac utilizando:
javac Pessoa.java
Teremos então o arquivo Pessoa.class. Vamos criar um arquivo testando_jruby.rb onde vamos testar essa classe:
# testando_jruby.rb require 'java' # o java_import faz parte desta biblioteca java_import 'Pessoa' pessoa = Pessoa.new 'João' pessoa.se_mostra # Observe que o nome do método no código Java é # seMostra, porém o JRuby faz um alias para # todos os métodos passando-os de Camelcase para # Underscore case. # Obs.: o método seMostra ainda existe. pessoa.nome = 'Carlos' # Observe que ao criarmos um setter # para o nome(setNome), o JRuby criou # o método nome= automaticamente. # Obs.: Os métodos setNome e set_nome # continuam existindo. puts pessoa.nome # Observe que ao criarmos um getter # para o nome(getNome), o JRuby criou # o método nome automaticamente # Obs.: Os métodos getNome e get_nome # continuam existindo.
Ao executarmos o exemplo acima, teremos como saída:
João Carlos
Lembrando que para executar este exemplo basta utilizar
jruby testando_jruby.rb
Agora vamos integrar nosso "Testando o JRuby" com um pouco de Java, criando uma janela. Instanciamos um objeto Java em JRuby usando a notação:
require 'java' module Swing include_package 'java.awt' include_package 'javax.swing' end module AwtEvent include_package 'java.awt.event' end # Reparem que não é necessário herdar nem # implementar nada, apenas definir o metodo # com o nome que o java exige (duck typing) class ListenerDoBotao def action_performed(evento) Swing::JOptionPane.showMessageDialog( nil, "ActionListener feito em ruby") end end frame = Swing::JFrame.new painel = Swing::JPanel.new frame.add painel label = Swing::JLabel.new # label.setText("Testando o JRuby!") label.text = "Testando o JRuby!" painel.add label botao = Swing::JButton.new 'clique aqui' botao.add_action_listener ListenerDoBotao.new painel.add botao frame.pack frame.set_size(400, 400) frame.visible = true
O include_package é parecido com um import, e depois estamos criando uma instância de JFrame. Dessa mesma maneira você pode acessar qualquer outra classe da biblioteca do Java. Assim você tem toda a expressividade e poder do Ruby, somado a quantidade enorme de bibliotecas do Java.
O JRuby permite a passagem de blocos de código como argumento para métodos do java que recebem como parâmetro uma interface que define apenas um método, assim como o futuro suporte a closures prometido para o Java 8. No exemplo acima poderíamos ter passado o ActionListener para o botão sem necessidade de escrever uma classe só para isso, e nem mesmo seria preciso instanciar um objeto, fazendo desta forma:
botao.add_action_listener do |evento| Swing::JOptionPane.showMessageDialog(nil, "ActionListener em closure") end
Xo สล็อตออนไลน์ โปรสล็อต XO เกมออนไลน์ทำเงินยอดฮิตเกมสล็อต xopg.net คือเกมทำเงิน reeffutures2018 ผ่านทางออนไลน์อย่างหนึ่ง ที่เล่นง่าย และได้เงินไว แถมยังลงทุนด้วยเงินน้อย mavoixtavoie ทำเงินได้ตลอดเวลา ซึ่งหลายคนอาจได้เคยเห็นรีวิวเรื่องของ สล็อต xo สล็อตออนไลน์ ไว้มากมาย เทคนิคสล็อต ทั้งเรื่องการเล่นแล้วได้เงิน herbalpertpresents และเล่น สล็อต แล้วไม่ได้เงิน นั่นเองค่ะ ซึ่งการที่คุณจะเล่นได้เงินหรือไม่ได้เงินนั้น essentialsforasoul ส่วนหนึ่งก็เป็นในเรื่องของดวงเข้ามาเกี่ยวด้วย northbristol เพราะสล็อตเป็นเกมออนไลน์เสี่ยงโชค ทดลองเล่น xo เกมหนึ่งซึ่งจะมีสูตร หรือเทคนิคเข้ามาช่วย gclub เพื่อโกงดวงอยู่เสมอซึ่งในเว็บของเรา สมัคร xo ก็มีมาแนะนำไว้ให้เห็นกันมากมายหลายสูตร
My partner and i ask one to the particular site to examine together with intriguing information on related subject areas. 사설토토
Listed here you'll learn it is important, them offers the link in an helpful webpage: 안전놀이터
Excellent read, Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. 벳삼
Excellent read, Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. 꽁머니사이트
In this case you will begin it is important, it again produces a web site a strong significant internet site: 링크찾기
You lost me, buddy. I mean, I imagine I get what youre stating. I understand what you are saying, but you just appear to have forgotten about that you will find some other men and women within the world who view this matter for what it really is and may not agree with you. You may perhaps be turning away many of persons who might have been fans of your blog. 토토사이트
Glad to be one of many visitors on this amazing web site : D. 토토커뮤니티
An impressive share, I recently with all this onto a colleague who has been conducting a little analysis on this. And he the truth is bought me breakfast simply because I found it for him.. smile. So let me reword that: Thnx for any treat! But yeah Thnkx for spending any time to talk about this, I feel strongly over it and enjoy reading on this topic. If you can, as you grow expertise, could you mind updating your blog site with an increase of details? It’s highly ideal for me. Massive thumb up due to this post! 꽁머니
You need to join in a contest first of the finest blogs on the web. I most certainly will suggest this site! waterloo roof cleaning service
Nice Post. It’s really a very good article. I noticed all your important points. Thanks 먹튀검증
Cheers for this excellent. I was wondering if you were thining of writing similar posts to this one. .Keep up the great articles! pods tracking
Interesting read , I am going to spend more time learning about this subject Anti-Cas9 antibody ELISA kit
Thanks so much for sharing this great info! I am looking forward to see more posts! Sliding Glass Door Roller Replacement Palm Beach County FL
I have been absent for a while, but now I remember why I used to love this blog. Thanks , I’ll try and check back more frequently. How frequently you update your site? unblocked games 66 ez
After research a couple of of the weblog posts in your web site now, and I actually like your way of blogging. I bookmarked it to my bookmark website list and shall be checking back soon. Pls check out my web page as well and let me know what you think. Cas9 ELISA kit
This committee help to many people. You can use their services in your work. You can read research papers about all details of their work. Auto Gate Repair
Conveyancing… [...]we like to honor other sites on the web, even if they aren’t related to us, by linking to them. Below are some sites worth checking out[...]… Roll up Garage Door
You’ve really written a very good quality article here. Thank you very much Anti-Cas9 antibody ELISA kit
The author covered some curious points here. I came across this by using Yahoo and I must confess that I am currently subscribed for your blog, it is quite great Roll up Grarage Door Opener Repair