¿Por qué usar Jython cuando solo podías usar Java?

La respuesta estándar es que es útil cuando solo necesita escribir unas líneas de código ...

Tengo ambos idiomas integrados dentro de Eclipse. Debido a que Eclipse maneja la compilación, la interpretación, la ejecución, etc. ambos "ejecutan" exactamente lo mismo.

El Eclipse IDE para ambos es similar: "compilación" instantánea, intellisense, etc. Ambos permiten el uso de la perspectiva Debug.

Si quiero probar algunas líneas de Java, no tengo que crear un proyecto Java completamente nuevo. Solo uso Scrapbook dentro de Eclipse, que me permite " ejecutar expresiones Java sin tener que crear un nuevo programa Java. Esta es una forma sencilla de probar rápidamente una clase existente o evaluar una fragmento de código ".

Jython permite el uso de las bibliotecas de Java, pero luego (¡por definición) Java!

Entonces, ¿qué otros beneficios ofrece Jython?

0
Lástima que esta pregunta esté cerrada; ya que hay un punto bastante bueno que no apareció en ninguna de las respuestas (a menos que lo pasara por alto): con jython, puedo ejecutar código nuevo en el contexto de un jvm en ejecución. No puedes hacer eso con java.
agregado el autor GhostCat, fuente
No pude entender por qué esta questin está cerrada.
agregado el autor Icche Guri, fuente
Es curioso, iba a preguntar "¿Por qué usar Java cuando podrías usar Jython?" Intente hacer Swing desde Jython y vea qué agradable es: btn = JButton ("Haga clic en mí", actionPerformed = SomeFunction) . Algo más fácil que tener que escribir una clase completa solo para manejar los clics de los botones, ¿no?
agregado el autor Cam Jackson, fuente

14 Respuestas

Acabo de descubrir a Jython y, como lingüista, creo que diría que es un poco como preguntar "¿por qué usar el latín cuando se puede usar el francés?" (Olvidando el hecho de que el latín llegó antes que el francés, por supuesto) .

Diferentes lenguajes humanos realmente te hacen pensar de diferentes maneras. El francés es un gran idioma, he vivido en Francia mucho tiempo y he obtenido un título en él. Pero el sorprendente poder y concisión de Latin pone su mente en una zona diferente, donde el orden de las palabras se puede intercambiar para producir todo tipo de efectos sutiles, por ejemplo.

Creo que, por mi breve conocimiento de Jython, que de hecho despertó mi entusiasmo, me hará pensar de diferentes maneras. Estuve muy escéptico sobre Python/Jython durante algún tiempo, y he sido un gran admirador de los genéricos de Java, por ejemplo (que irónicamente reducen la cantidad de tipeo y por lo tanto "latinizan" el francés si quieren). No entiendo completamente las implicaciones de los lenguajes de "escritura dinámica" como Jython, pero creo que lo mejor es ir con la corriente y ver qué hace Jython en mi mente.

Es curioso cómo los idiomas van y vienen. Otro "latín" podría considerarse como Algol68 con su sintaxis infinitamente recursiva. Pero la necesidad de desarrollar un código masivamente recursivo, y la capacidad de leerlo y pensar en él, aún no se ha hecho sentir. Jython parece ser un ajuste muy poderoso y elegante con el lugar en el que nos encontramos ahora, con las librerías OO, el poder del swing de Java y todo envuelto en un paquete muy elegante. ¿Quizás algún día Jython también adopte una sintaxis infinitamente recursiva?

0
agregado

Utilizo Jython para la prueba interactiva del código Java. Esto a menudo es mucho más rápido que escribir aplicaciones de prueba Java o incluso cualquier lenguaje de scripting. Puedo jugar con los métodos y ver cómo reacciona. Desde allí puedo aprender lo suficiente como para escribir un código real o casos de prueba.

0
agregado

Un ejemplo rápido (de http://coreygoldberg. blogspot.com/2008/09/python-vs-java-http-get-request.html ):

Tiene un back-end en Java y necesita realizar resúmenes HTTP GET.

Nativamente:

import java.net.*;
import java.io.*;

public class JGet {
    public static void main (String[] args) throws IOException {
        try {
            URL url = new URL("http://www.google.com");

            BufferedReader in = 
                new BufferedReader(new InputStreamReader(url.openStream()));
            String str;

            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }

            in.close();
        } 
        catch (MalformedURLException e) {} 
        catch (IOException e) {}
    }
}

En Python:

import urllib
print urllib.urlopen('http://www.google.com').read()

Jython le permite usar la robustez de Java y, cuando sea necesario, la claridad de Python.

Qué más ? Como diría Georges ...

0
agregado
Sí, solo tienes que codificarlo tú mismo. Como todo lo demás.
agregado el autor e-satis, fuente
Primero, el código de Java no hace mucho más. El código de Python está lleno de OO y el de abrir() envuelve un objeto de archivo que hace la transmisión. Además, no veo nada sobre un marco aquí. ASÍ SÍ, hay manejo de excepciones, pero también puedes hacerlo en Python. El verdadero problema aquí es que java simplemente no te permite hacerlo de una manera más corta, incluso con menos funciones. No es un ataque contra Java. Mi punto es justo: usarías Jython porque a veces, quieres algo más fino.
agregado el autor e-satis, fuente
Estás haciendo mi punto: esta es la razón por la que usarías Jython y no solo Java.
agregado el autor e-satis, fuente
El código Jython basado en Java puede ser tan conciso como Python: inStream = URL (" python.org "). openConnection (). getInputStream() resultado = s = Escáner (inStream) .useDelimiter (" \\ A "). next ()
agregado el autor tnorgd, fuente
Nada impide que Java tenga una clase de utilidad que haga UrlUtil.open ("www.google.com"). Read ().
agregado el autor Marcio Aguiar, fuente
El ejemplo de Corey Goldberg que compara Java con Python es una comparación tan falsa como se puede encontrar en Internet, y el ejemplo anterior no es mucho mejor. (Además, insinúa una dicotomía de robustez/claridad que es discutible). El código de Java anterior hace mucho más que el código de Python (OO, lectura en búfer, marco de excepción, etc.). Hay razones para usar Jython, pero un ejemplo artificial de brevedad no es muy persuasivo.
agregado el autor Glenn, fuente

Bibliotecas de Python;) Por ejemplo, BeautifulSoup - un analizador HTML que acepta marcas incorrectas. AFAIK no hay una lib de Java pura similar.

0
agregado
Tienes razón. La versión estable es Python 2.2 equivalente. Podría ser demasiado viejo ... y Jython 2.5 aún está en estado alfa. Una vez que esté disponible la versión estable, debería funcionar.
agregado el autor sumek, fuente
¿Estás seguro de que funciona bajo Jython?
agregado el autor Cristian Ciupitu, fuente

La sintaxis de Python (utilizada por Jython) es considerablemente más concisa y más rápida de desarrollar para muchos programadores.

Además, puede usar las bibliotecas de Python existentes en una aplicación Java.

0
agregado

Jython también se puede utilizar como un lenguaje de scripting incorporado dentro de un programa Java. Puede que le resulte útil en algún momento escribir algo con un lenguaje de extensión integrado. Si trabajar con Java Jython es una opción para esto (Groovy es otro).

Principalmente he usado Jython para la programación exploratoria en sistemas Java. Pude importar partes de la aplicación y explorar la API para ver qué sucedía al invocar llamadas desde una sesión interactiva de Jython.

0
agregado

Algunas tareas son más fáciles en algunos idiomas que en otros. Si tuviera que analizar algún archivo, elegiría Python sobre Java en un abrir y cerrar de ojos.

0
agregado
Necesitaba leer un archivo sin formato y analizar partes clave de datos. Incrustar jython en el medio de mi aplicación java me permite escanear fácilmente el archivo utilizando expresiones regulares y listas de comprensión, y luego devolver mis hallazgos a mi código java.
agregado el autor gregturn, fuente

Usar Python es más que "azúcar sintáctico" a menos que disfrutes escribiendo (o haciendo que tu IDE genere) cientos de líneas de código de placa de caldera. Existe la ventaja de las técnicas de desarrollo rápido cuando se utilizan lenguajes de tipado dinámico, aunque la desventaja es que complica su API e integración porque ya no tiene una base de código homogénea. Esto también puede afectar el mantenimiento porque no todos en tu equipo aman a Python tanto como a ti y no serán tan eficientes con él. Esto puede ser un problema.

0
agregado

Analogía: ¿Por qué beber café cuando puede, en cambio, beber agua caliente del grifo y masticar frijoles amargos asados? :-)

Para algunas tareas, Python solo sabe mejor, funciona mejor y es lo suficientemente rápido (¿lleva tiempo preparar?). Si su entorno de programación o despliegue se centra en la JVM, Jython le permite codificar Python, pero sin cambiar su entorno de implementación y tiempo de ejecución.

0
agregado

Sintaxis de azúcar.

0
agregado
Sí. Los programadores reales usan una aguja magnetizada y una mano firme (c) xkcd.com/378 . Todo lo demás es una sintaxis de azúcar.
agregado el autor jfs, fuente

No es necesario compilar. Tal vez quiera hacer que algo avance más rápido que usar un lenguaje compilado, como un prototipo.

... y puedes insertar el intérprete Jython en tus aplicaciones. Buena característica, no puedo decir que la haya usado, pero de todos modos es genial.

0
agregado

En su situación, no tiene mucho sentido. Pero eso no significa que nunca lo haga. Por ejemplo, si está desarrollando un producto que le permite a los usuarios finales crear extensiones o complementos, podría ser bueno que sea secuenciable.

0
agregado

Python tiene algunas características de programación funcional, como lambdas. Java no tiene esa funcionalidad, y algunos programas serían considerablemente más fáciles de escribir si dicho soporte estuviera disponible. Por lo tanto, a veces es más fácil escribir el código en Python e integrarlo a través de Jython que intentar escribir el código en Java.

0
agregado
Java 8 tiene lambdas.
agregado el autor Daniel, fuente

La transferencia de código existente a un nuevo entorno puede ser una razón. Parte de la lógica de su negocio y la funcionalidad del dominio pueden existir en Python, y el grupo que escribe ese código insiste en usar Python. Pero el grupo que lo implementa y lo mantiene puede querer la capacidad de administración de un clúster J2EE para la escala. Puede ajustar la lógica en Jython en un EAR/WAR y luego el grupo de implementación solo está viendo otro paquete J2EE para ser administrado como todos los otros paquetes J2EE.

es decir, es un medio para tratar con un desajuste de impedancia.

0
agregado