De ce să folosiți Jython atunci când puteți folosi doar Java?

Răspunsul standard este că este util când trebuie doar să scrieți câteva linii de cod ...

Am ambele limbi integrate în Eclipse. Deoarece Eclipse se ocupă de compilarea, interpretarea, difuzarea etc., ambele "executați" exact același lucru.

IDE-ul Eclipse pentru ambele este similar - "compilație" instant, intellisense etc. Ambele permit utilizarea perspectivei Debug.

Dacă vreau să testez câteva linii de Java, nu trebuie să creez un nou proiect Java - folosesc doar Scrapbook în interiorul Eclipse care îmi permite să " execute expresii Java fără a crea un program Java nou. fragment de cod ".

Jython permite utilizarea bibliotecilor Java - dar apoi (prin definiție) face Java!

Deci ce alte beneficii oferă Jython?

0
Păcat că această întrebare este închisă; deoarece există un punct destul de bun care nu a apărut în niciunul dintre răspunsuri (dacă nu am trecut cu vederea): cu jython, pot executa un nou cod în contextul unui jvm care rulează. Nu puteți face asta cu java.
adăugat autor GhostCat, sursa
Nu am putut înțelege de ce această chestiune este închisă.
adăugat autor Icche Guri, sursa
Funny, aveam de gând să întreb "De ce să folosiți Java când ați putea să-l folosiți pe Jython?" Încercați să faceți Swing din Jython și să vedeți cât de plăcut este: btn = JButton ("Faceți clic pe mine", actionPerformed = SomeFunction) . Mai ușor decât să scrie o întreagă clasă doar pentru a face față clicurilor de pe buton, nu?
adăugat autor Cam Jackson, sursa

14 răspunsuri

Tocmai am descoperit-o pe Jython și, cred că un pic de lingvist, aș spune că este un pic cam ca să-mi întrebați "de ce să folosiți limba latină când puteți folosi limba franceză" (uitând de faptul că latina a venit înainte de franceză, bineînțeles) .

Diferitele limbi umane vă fac să vă gândiți în moduri diferite. Franceză este o limbă minunată, am trăit mult timp în Franța și am făcut o diplomă în ea. Dar puterea și concisia latinilor uimitoare vă pun mintea într-o altă zonă, unde ordinea cuvintelor poate fi schimbată pentru a produce tot felul de efecte subtile, de exemplu.

Cred că, din cunoștința mea obișnuită cu Jython, care mi-a dat cu adevărat entuziasmul, că mă va face să mă gândesc în moduri diferite. Am fost foarte sceptic în legătură cu Python/Jython de ceva timp și am fost un mare fan al genericilor Java, de exemplu (care reduc ironic cantitatea de scriere și, prin urmare, "latinizează" francezii dacă doriți). Nu înțeleg complet implicațiile limbilor "tipărite în mod dinamic", cum ar fi Jython, dar cred că cel mai bine este să mergem cu fluxul și să vedem ce îmi face Jython în minte!

Este amuzant cum vin limbajul. Un alt "latin" ar putea fi considerat a fi Algol68 cu sintaxa sa infinit recursivă. Dar nevoia de a dezvolta un cod masiv recursiv și capacitatea de ao citi și de a gândi în el nu sa simțit (încă). Jython pare a fi o potrivire foarte puternică și elegantă cu locul unde suntem acum, cu bibliotecile OO, puterea Java swing și totul înfășurat într-un pachet foarte elegant. Poate într-o zi Jython va adopta și sintaxa infinit recursivă?

0
adăugat

Eu folosesc Jython pentru testarea interactive a codului Java. Acest lucru este adesea mult mai rapid decât scrierea aplicațiilor de testare Java sau chiar a oricărui limbaj de scripting. Pot să joc cu metodele și să văd cum reacționează. De acolo pot să învăț suficient pentru a merge și a scrie câteva coduri reale sau cazuri de testare.

0
adăugat

Un exemplu rapid (de la http://coreygoldberg. blogspot.com/2008/09/python-vs-java-http-get-request.html ):

Aveți un back-end în Java și trebuie să efectuați recuperări HTTP GET.

Nativă:

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) {}
    }
}

În Python:

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

Jython vă permite să utilizați robustețea java și, atunci când este necesar, claritatea Python.

Ce altceva ? După cum spune Georges ...

0
adăugat
Da, trebuie doar să-l codifici singur. Ca orice altceva.
adăugat autor e-satis, sursa
În primul rând, codul java nu face atât de mult. Codul Python este plin OO iar wrap() deschide un obiect de fișier care face streaming. În plus, nu văd nimic despre un cadru aici. Da, există o manipulare a excepțiilor, dar o puteți face și în Python. Problema reală aici este că java nu te lasă să o faci într-un mod mai scurt, chiar și cu mai puține trăsături. Nu este un atac împotriva Java. Punctul meu este doar: ai folosi Jython pentru că, uneori, vrei ceva mai subțire.
adăugat autor e-satis, sursa
Voi faceți acest lucru: de aceea ați folosi Jython și nu doar Java.
adăugat autor e-satis, sursa
Codul Jython bazat pe Java poate fi la fel de concis ca și Python: inStream = URL (" ()) getInputStream() rezultatul = s = Scanner (inStream) .useDelimiter ("\\ A") next ()
adăugat autor tnorgd, sursa
Nimic nu opreste Java de la a avea o clasa de utilitati care face UrlUtil.open ("www.google.com"). Citi ().
adăugat autor Marcio Aguiar, sursa
Exemplul Corey Goldberg care compară Java cu Python este la fel de falsă o comparație pe care o puteți găsi pe internet, iar exemplul de mai sus nu este mult mai bun. (De asemenea, indică o dihotomie robustă/clară care este discutabilă.) Codul Java de mai sus are mult mai mult decât codul Python (OO, lectură tamponată, cadru de excepție etc.). Există motive pentru a folosi Jython, dar un exemplu contrariat de coincidență nu este foarte convingător.
adăugat autor Glenn, sursa

Bibliotecile Python;) De exemplu BeautifulSoup - un parser HTML care acceptă marcarea incorectă. AFAIK nu există nici o Java lib lib.

0
adăugat
Ai dreptate. Versiunea stabilă este Python 2.2 echivalentă. Ar putea fi prea vechi ... și Jython 2.5 este încă în stare alfa. După eliberarea stabilă, ar trebui să funcționeze.
adăugat autor sumek, sursa
Ești sigur că funcționează sub Jython?
adăugat autor Cristian Ciupitu, sursa

Sintaxa Python (folosită de Jython) este considerabil mai concisă și mai rapidă pentru mulți programatori.

În plus, puteți utiliza bibliotecile Python existente într-o aplicație Java.

0
adăugat

Jython poate fi de asemenea utilizat ca limbă de scripting încorporată în cadrul unui program Java. S-ar putea să vă fi util să scrieți ceva la un moment dat cu o limbă de extensie construită. Dacă lucrați cu Java Jython este o opțiune pentru acest lucru (Groovy este altul).

Am folosit în principal Jython pentru programare exploratorie pe sisteme Java. Am putut importa părți ale aplicației și m-am prins în jurul API pentru a vedea ce sa întâmplat invocând apelurile de la o sesiune interactivă Jython.

0
adăugat

Unele sarcini sunt mai ușor în unele limbi, apoi în altele. Dacă ar fi trebuit să analizez un fișier, aș alege Python peste Java într-o clipită.

0
adăugat
Aveam nevoie să citesc un fișier brut și să analizez biții cheie de date. Încorporarea lui jython în mijlocul aplicației mele java permite scanarea cu ușurință a fișierului folosind expresii regulate și înțelegeri de listă și apoi returnez constatările mele în codul meu java.
adăugat autor gregturn, sursa

Folosirea Python este mai mult decât "zahăr sintactic", cu excepția cazului în care vă bucurați scriind (sau având IDE-ul generat) sute de linii de cod placă de cazan. Există avantajul tehnicilor Rapid Development atunci când folosiți limbaje dinamice, deși dezavantajul este că acestea complică API-ul și integrarea, deoarece nu mai aveți o bază de cod omogenă. Acest lucru poate afecta și întreținerea, deoarece nu toată lumea din echipa ta iubește Python la fel de mult ca tine și nu va fi la fel de eficientă cu ea. Asta poate fi o problemă.

0
adăugat

Analogie: De ce beți cafea atunci când puteți bea apă caldă de la robinet și mestecați-o pe fasolea amară prăjită. :-)

Pentru unele sarcini, Python are doar un gust mai bun, funcționează mai bine și este destul de rapid (necesită timp pentru a fi preparat?). Dacă mediul de programare sau de implementare este axat pe JVM, Jython vă permite să codificați Python, fără a schimba mediul de implementare și runtime.

0
adăugat

Sintaxă de zahăr.

0
adăugat
Da. Programatorii adevărați folosesc un ac magnetizat și o mână stabilă (c) xkcd.com/378 . Totul altceva este un sintaxă de zahăr.
adăugat autor jfs, sursa

Nu este nevoie să compilați. Poate doriți să obțineți ceva de rulare mai rapid decât folosind un limbaj compilat, ca un prototip.

... și puteți încorpora interpretul Jython în aplicațiile dvs. O caracteristică plăcută, nu pot spune că am folosit-o, dar, totuși, este minunată.

0
adăugat

În situația dvs., nu are prea mult sens. Dar asta nu înseamnă că nu o face niciodată. De exemplu, dacă dezvoltați un produs care permite utilizatorilor finali să creeze extensii sau pluginuri, este bine să fie scriptabil.

0
adăugat

Python are câteva caracteristici ale programării funcționale, cum ar fi lambda. Java nu are o astfel de funcționalitate, iar unele programe ar fi mult mai ușor de scris dacă acest suport a fost disponibil. Astfel, uneori este mai ușor să scriem codul în Python și să îl integrăm prin intermediul lui Jython pentru a încerca să scriem codul în Java.

0
adăugat
Java 8 are lambda.
adăugat autor Daniel, sursa

Portarea codului existent într-un mediu nou poate fi un motiv. Unele dintre logica dvs. de afaceri și funcționalitatea domeniului pot exista în Python, iar grupul care scrie acel cod insistă să utilizeze Python. Dar grupul care o desfasoara si o mentine poate ar dori managabilitatea unui cluster J2EE pentru scala. Puteți împacheta logica în Jython într-un EAR/WAR și apoi grupul de implementare văd doar un alt pachet J2EE pentru a fi gestionat ca toate celelalte pachete J2EE.

adică este un mijloc de a face față unei nepotriviri de impedanță.

0
adăugat