2008-09-18 9 views
24

La respuesta estándar es que es útil cuando solo necesita escribir unas líneas de código ...¿Por qué usar Jython cuando solo podías usar Java?

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 de depuración.

Si quiero probar algunas líneas de Java, no tengo que crear un proyecto Java completamente nuevo. Solo uso la función 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 un fragmento de código ".

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

¿Qué otros beneficios ofrece Jython?

+5

Curioso, iba a preguntar "¿Por qué usar Java cuando puedes usar Jython?" Intenta hacer Swing desde Jython y observa qué agradable es: 'btn = JButton (" Haz 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? –

+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. – GhostCat

+0

No puedo entender por qué esta questin está cerrada. –

Respuesta

0

Sintaxis de azúcar.

+2

Sí. Los programadores reales usan una aguja magnetizada y una mano firme (c) http://xkcd.com/378/. Todo lo demás es una sintaxis de azúcar. – jfs

18

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.

1

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

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

0

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.

2

Librerías de Python;) Por ejemplo BeautifulSoup - un analizador de HTML que acepta marcado incorrecto. AFAIK no hay una lib de Java pura similar.

+0

¿Estás seguro de que funciona bajo Jython? –

+0

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. – sumek

2

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

Java 8 tiene lambdas. – Daniel

4

Algunas tareas son más sencillas 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.

+1

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. – gregturn

4

Usar Python es más que "azúcar sintáctico" a menos que disfrutéis escribiendo (o haciendo que tu IDE genere) cientos de líneas de código de la placa de la 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.

1

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).

He utilizado principalmente 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.

36

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

Usted tiene un extremo trasero en Java, y lo que necesita para llevar a cabo HTTP GET resquests.

forma nativa:

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 utilizar la robustez de Java y cuando sea necesario, la claridad de Python.

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

+14

Nada impide que Java tenga una clase de utilidad que hace UrlUtil.open ("www.google.com"). Read(). –

+22

Sí, solo tiene que codificarlo usted mismo. Como todo lo demás. –

+7

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. – Glenn

5

Yo uso Jython para interactivo prueba de 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

La transferencia del 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 hacer frente a una desigualdad de impedancia.

6

Analogía: ¿Por qué beber café cuando en su lugar puede 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.

6

Acabo de descubrir 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).

Los 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, gracias a 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 lenguajes 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 para ser un ajuste muy potente y elegante con el lugar en el que nos encontramos ahora, con las bibliotecas OO, el poder de Java swing, y todo envuelto en un paquete muy elegante. ¿Quizás algún día Jython también adopte una sintaxis infinitamente recursiva?