当我们只能使用Java时,为什么还要使用Jython?
标准答案是,当我们只需要编写几行代码时,它很有用...
我在Eclipse中集成了两种语言。因为Eclipse处理编译,解释,运行等操作,所以两者"运行"完全相同。
两者的Eclipse IDE都是类似的即时"编译",智能感知等。两者都允许使用Debug透视图。
如果我想测试几行Java,则不必创建一个全新的Java项目,而只需在Eclipse中使用Scrapbook功能,该功能使我可以"执行Java表达式而不必创建新的Java程序。是一种快速测试现有类或者评估代码段的巧妙方法。"
Jython允许使用Java库,但是Java可以(根据定义)使用Java库!
那么,Jython还提供哪些其他好处?
解决方案
语法糖。
对于许多程序员而言,Python语法(由Jython使用)更加简洁明了,并且开发速度更快。
此外,我们可以在Java应用程序中使用现有的Python库。
无需编译。也许我们希望比使用诸如原型之类的编译语言更快地推出产品。
...我们可以将Jython解释器嵌入到应用程序中。不错的功能,我不能说我已经使用过,但是仍然很酷。
在情况下,这没有多大意义。但这并不意味着它永远不会。例如,如果我们正在开发一种允许最终用户创建扩展名或者插件的产品,那么将其编写为脚本可能会很好。
Python库;)例如,BeautifulSoup是一个接受不正确标记的HTML解析器。 AFAIK没有类似的纯Java库。
Python具有函数式编程的某些功能,例如lambda。 Java没有这种功能,如果有这样的支持,某些程序将容易编写得多。因此,有时更容易用Python编写代码并通过Jython进行集成,从而尝试用Java编写代码。
在某些语言中,某些任务比其他语言更容易。如果我必须解析一些文件,那么我会在一瞬间选择Python而不是Java。
除非我们喜欢编写(或者让IDE生成)数百行样板代码,否则使用Python不仅是"语法糖"。使用动态类型语言时,Rapid Development技术具有优点,尽管缺点是它使API和集成变得复杂,因为我们不再具有同质的代码库。这也会影响维护,因为并非团队中的每个人都像我们一样喜欢Python,并且使用Python的效率不高。那可能是个问题。
Jython还可以用作Java程序中的嵌入式脚本语言。我们可能会发现使用内置扩展语言编写某些内容很有用。如果使用Java,则可以选择Jython(另一个是Groovy)。
我主要将Jython用于Java系统上的探索性编程。我可以导入应用程序的某些部分,并在API周围进行戳记,以查看通过交互式Jython会话进行的调用所发生的情况。
一个简单的示例(来自http://coreygoldberg.blogspot.com/2008/09/python-vs-java-http-get-request.html):
我们有Java的后端,并且需要执行HTTP GET请求。
本机:
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) {} } }
在Python中:
import urllib print urllib.urlopen('http://www.google.com').read()
Jython允许我们使用Java健壮性以及在需要时使用Python的清晰度。
还有什么 ?就像乔治会说的...
我使用Jython进行Java代码的交互式测试。这通常比编写Java测试应用程序甚至任何脚本语言要快得多。我可以使用这些方法,看看它是如何反应的。从那里我可以学到足够的知识去编写一些真实的代码或者测试用例。
将现有代码移植到新环境中可能是原因之一。某些业务逻辑和域功能可能存在于Python中,而编写该代码的小组则坚持使用Python。但是部署和维护它的小组可能需要规模的J2EE集群可管理性。我们可以将逻辑包装在EAR / WAR中的Jython中,然后部署组就像其他所有J2EE捆绑包一样看到另一个J2EE捆绑包进行管理。
即这是一种处理阻抗不匹配的方法。
打个比方:为什么可以喝咖啡,而可以喝热的自来水并咀嚼烤苦豆。 :-)
对于某些任务,Python只是味道更好,效果更好并且足够快(需要时间酿造吗?)。如果编程或者部署环境专注于JVM,则Jython允许我们编写Python代码,而无需更改部署和运行时环境。