Groovy是连接脚本语言和企业级Java世界的桥梁 二

Groovy是连接脚本语言和企业级Java世界的桥梁 二

IndicThreads >> Groovy语言有一天可能成为Java世界的标准脚本语言吗?这样我就可以作为Java SE/EE的一部分下载到。在Java 6,Mustang版本中,可能会出现对Groovy的一些支持吗?

Guillaume Laforge >> Java 6,即众所周知的"Mustang",会包含JSR-223,"JavaTM平台的脚本"。目前实现JSR-223的参考提供了和Groovy语言的集成,所以如果你想用它,你就可以马上使用,甚至是在JDK1.4或5.0中使用。你不得不使用一个次新版的Groovy,因为目前,提供的最新版只是一个beta版。

"Java 6,"Mustang",会包含JSR-223,"JavaTM平台的脚本"..."

Mustang的betas版集成了一个稍微修改过的JSR-223版本,仅仅只集成了Rhino,来自Mozilla的JavaScript引擎。不幸的是,据我所知,他们没有集成Groovy。所以我们不得不为Java 6创建我们自己的脚本引擎,但是可以确定的是我们在Java 6 愿意做这件事之前就已经做好了准备。

IndicThreads >>X跟Y的比较永远能够吸引眼球。我能够引起您对于Groovy和Jpython的比较的兴趣吗?

Guillaume Laforge >>坦白的说,我对于这类的比较没有什么兴趣。这里有很多原因这样做。首先,我不知道其他的JVM语言是否足够好,以至于我们可以做一个公平的比较。我也不想散布一些否定的断言,因为我带着有偏见的视角。最后一个原因是我不想和其他的语言在"我的比你的好"这样的论调中战斗,因为这是浪费时间,最重要的原因是我们是同舟共济的!我们都希望有好的脚本语言可以嵌入到我们的应用中来,或者写成独立的应用!

"我们都希望有好的脚本语言可以嵌入到我们的应用中来,或者写成独立的应用!..."

如果你已经写了Python程序好多年,你将会选择Jpython,所以我猜如果你的团队成员都很熟悉Python,那么将没有特别好的理由来选择Groovy。如果你已经很熟悉Ruby,那么也是相同的情况,你将选择Jruby。如果你更喜欢普通的类Java语法加上一点弱类型,那么BeanShell也将是更好的选择。如果你也喜欢类Java的语法,但是更喜欢尽可能的使用强大的APIs,能够使用Groovy 元对象协议来进行高级的类操作的话,Groovy语言将更为合适一些。

"如果你的团队非常熟悉Python,那么就没有特别的理由来选择Groovy(超过选择Jpython)..."

每一种语言都有它的优点和缺点,我真的不能(随便)推荐我自己的,虽然我的偏爱会直接选择Groovy,因为它的表达语言和高级特性。但这依赖于你的用例。

IndicThreads >>您是怎么决定Groovy语言的发展的?Groovy语言是在尽力的修补Java语言的一切弱点吗?您是否也从其他的语言如Python和Ruby中采纳了一些思想?

Guillaume Laforge >>就目前而言,没有太多的思想加入到Groovy中来,因为接下来的几个月里,在第一个发布版本以前,我们将进入一个"特性冰冻"的模式。所以我们不想再加入新的东西,除了性能的提升或bug的修改。Groovy语言决定提供一些对于通用的、广泛使用的APIs的包装类。所以我们得到了顺手的类来处理JDBC,创建Swing GUI接口,或者可以非常容易的操作Ant任务。但是很清楚的是,我们不想创建我们自己版本的APIs,我们仅仅是提供一些语法糖来将复杂的工作简单化--像处理数据库连接或流处理。

"在Java中困扰我们的是一切的我们不得不写的样板代码..."

"通过使用(Groovy语言的)闭包和ad hoc方法,我们可以安全的忘掉那些重复的和烦人的样板代码片段,从而关注手边的主要任务..."

在Java中困扰我们的是一切的我们不得不写的样板代码,例如集合的遍历,这些代码是为了正确的处理资源。通过使用闭包和ad hoc方法,我们可以安全的忘掉那些重复的和烦人的样板代码片段,从而关注手边的主要任务。Groovy语言让我们在这些情况下更加产品化,并且能够使得我们避免犯一些普通的错误,如忘记关闭流,等等。

"一旦你习惯了闭包的概念,你将会被牢牢的吸引住,你会纳闷为什么Java仍然没有支持这个特性!..."

我们从一些知名的脚本语言中吸取了一些思想。其中最大的特性就恰恰是闭包,它来自于一些语言例如SmallTalk和Ruby。一旦你习惯了闭包的概念,你将会被牢牢的吸引住,你会纳闷为什么Java仍然没有支持这个特性!

IndicThreads >> "闭包支持"在Groovy网站上被列为Groovy语言的第一特性。您能不能告诉我们什么是闭包,最好能有一个例子?

Guillaume Laforge >>闭包很简单,就是能够重用和发布的代码块。这是一个概念,很不幸的是,到今天也不存在于Java语言中。如果我对于Java语言只有一个特性要求,那么它就是自然的支持闭包!

"闭包很简单,就是能够重用和发布的代码块..."

在Groovy中,闭包看起来就是由大括号包围起来的语句段。至于例子,下面的语句行就是一个闭包:

{ println "hello" }

但是你能够把这个闭包分配给一个变量:

def helloClosure = { println "hello" }

然后,你就可以调用这个闭包,就像它是一个普通的方法一样:

helloClosure() // and it'll print hello

你可以传递一个参数给一个闭包:

def printer = { msg -> println "your message is: $msg" }

然后,你就可以调用和重用这个"printer"闭包:

printer( "hello" )
printer( "Groovy!" )

现在,让我们看一个更有用的例子。例如,你有一个list对象,你想过滤:

def myNumbers = [1, 2, 3, 4, 5]
def criteria = { it > 3 } // 'it' is an implicit parameter
def result = myNumbers.findAll( criteria )

你可以传递一个条件到"findAll()"方法里,使得它能够找到list对象中大于3的数字。你也可以使用匿名的闭包:

def result = myNumbers.findAll { it > 3 }

在Java语言中,你会不得不写一段的样板代码来做这样一个过滤集合的简单事情!在Groovy语言中,它只有简单的一行。

闭包可以给你更加有表达性的代码,通过允许你重用代码段来操作集合和其他的事情。

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值