Java ou Python? Jython!

O interpretador Python padrão, também conhecido como CPython, é implementado em linguagem C, e nada mais é do que um programa que roda diretamente sobre o hardware. Além do CPython, existem implementações alternativas do interpretador Python. Talvez a mais popular dentre elas, o Jython é escrito em Java e roda sobre a JVM. Além de poder ser executado em qualquer ambiente que possua uma JVM instalada, Jython possibilita que APIs Java sejam utilizadas em Python. Ou seja, tenta unir o melhor de dois mundos: a rapidez no desenvolvimento de Python com a enorme quantidade de APIs maduras disponíveis para Java. Por se tratar de um interpretador Python, a sintaxe dos programa escritos para rodar sobre o Jython é idêntica a dos programas escritos para rodar sobre o CPython.

Mas como funciona isso?

É bem simples, basta importar as libs Java e sair usando, com a sintaxe de Python. Veja:

>>> from java.lang import Math, System
>>> raiz = Math.sqrt(9)
>>> System.out.println(raiz)
3.0

O trecho de código acima foi executado no interpretador Jython (disponível em jython.org).

Viu que maravilha? Importamos e executamos o código de bibliotecas Java, mas com a sintaxe de Python!

Herança

Outra coisa fantástica é a possibilidade de estender classes Java usando Python. Por exemplo, considere a seguinte classe Java (copiada descaradamente daqui):

public class Bicycle {

    public int cadence;
    public int gear;
    public int speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    public void setCadence(int newValue) {
        cadence = newValue;
    }

    public void setGear(int newValue) {
        gear = newValue;
    }

    public void applyBrake(int decrement) {
        speed -= decrement;
    }

    public void speedUp(int increment) {
        speed += increment;
    }
}

Se quisermos estender a classe acima, especializando-a para representar um tipo específico de bicicleta, como uma mountain bike, podemos estendê-la como se fosse uma classe Python. Veja abaixo o exemplo (MountainBike.py):

import Bicycle

class MountainBike(Bicycle):

    def __init__(self, seatHeight, startCadence, startSpeed, startGear):
        super(Bicycle, self).__init__(self, startCadence, startSpeed, startGear)
        self.seatHeight = seatHeight

    def setHeight(self, seatHeight):
        self.seatHeight = seatHeight

Se quiser testar os exemplos acima, não esqueça de:

  1. Compilar o arquivo Bicycle.java com um compilador Java:
    • javac Bicycle.java
  2. Rodar o arquivo MountainBike.py com o jython:
    • jython MountainBike.py

Todo programa Python vai rodar no Jython?

Não. Alguns programas rodam somente na implementação padrão do interpretador, pois dependem de módulos específicos que foram escritos em C e que ainda não foram portados para Java. Mas, de acordo com o FAQ, a grande maioria já está disponível.

Por que usar Jython?

Odeia a sintaxe e exigências semânticas de Java, mas não desgruda por causa das APIs que ela oferece? Manda ver com Jython! As possibilidades são muitas! Que tal reaproveitar aquela classe Java que você criou há tempos e que vem quebrando um galhão nos seus projetos? Basta importá-la como se fosse um módulo Python e chamar seus métodos.

Outros casos de uso para Jython podem ser protótipos de aplicações explorando bibliotecas Java, implantação de aplicações Django em containers Java como Tomcat/Jboss/Glassfish, usando recursos desses ambientes e integrando com outras aplicações Java já existentes, e por último mas não menos importante: tornar sua aplicação Java extensível permitindo que os usuários adicionem comportamento escrevendo scripts em Python.

Mais informações

Obrigado ao Elias Dorneles pela colaboração!

Anúncios

3 comentários sobre “Java ou Python? Jython!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s