★Spring2.0+JRuby快速入门★

Spring2.0+JRuby快速入门★
随着Ruby,特别是Ruby on Rail在应用领域所取得的成功,近两年来动态语言成为炙手可热的技术之一。由于动态语言灵活、松散的结构,使得实现某些功能特别方便。Spring 顺应时势,在Spring 2.0中适时推出了对动态语言的支持,允许你以普通Bean的方式调用动态语言实现的程序。
 动态语言介绍

  动态语言也称为脚本语言,是介于标签语言(如HTML,XSLT,VML)和静态语言(如C++、C#、Java,也称编译语言)之间的语言。JavaScript、PHP、Perl、Ruby等都是动态语言。动态语言无需编译,它由解释器动态解释执行,一般来说,动态语言拥有比静态语言更大的灵活性和表达能力。

  动态语言优势在于灵活,易于开发和学习,劣势在于性能较低。在高性能服务器和并行处理的实现方案里,动态语言的优势掩盖自身的不足。一般来说,完成同样逻辑功能的程序,使用Ruby或Python之类的动态语言所需的代码量往往只有使用Java实现版本的1/10,相比C/C++差距更大。

  近两年来,动态语言似乎有山雨欲来风满楼的气势。在各大开发技术网站,有大量介绍动态语言的文章,在各大论坛里,人们针对动态语言的学习、交流、论战、预测的帖子不断成为抢眼热帖,搅动着开发者的神经。

  动态语言的特性及适用场合

  动态语言最突出的特性是语法简洁灵活,易于学习,拥有大量高级程序库,无须从底层开始搭建程序,降低了应用实现的难度。一个C++程序员,往往经过了几年的训练仍然不能开发出可用的程序,但动态语言的程序员经过几个月的训练就已经可以编写出可复用性的代码了。此外,动态语言的代码往往以开源的形式发布,容易被使用和学习。

  程序库往往决定了一种语言应用难度,纵观历史,凡是具有优秀程序库的语言生命力都很顽强,反之则容易销声匿迹。目前几种流行的动态语言,都具有丰富的程序库,在Python中,不仅具有诸如网络应用,多线程,图像处理,科学运算之类的程序库,甚至还拥有多套不同量级的Framework来辅助Web开发。事实上,任何需要的功能几乎都能找到相对稳定的程序库,大部分程序员仅仅需要组合这些库就能编写出强大的应用——这也正是使用动态语言开发程序代码量较少的原因之一。

  除了众多的程序库,动态语言本身的种类也远远大于静态语言,同样,每种语言也各具特点。Ruby,Python,Groovy,Perl是四种颇具代表性的动态语言,按照一般的看法,这些语言适合用来黏合不同的系统和模块,素有“胶水”的之称。后来人们发现“胶水”不仅仅能粘合其他模块,本身也具有强大的功能。在没有性能问题的重要性不突出的场合,动态语言看起来无所不能了,无论是网站还是应用程序,都能看到动态语言的身影。对时下的程序员来说,掌握一种动态语言已不仅仅是赶时髦,虽然你不一定能够靠单单一种动态语言找到一份喜欢的工作,但适时地采用动态语言,一定可以让你的工作变的简单许多。

  系统软件和应用软件的界限已经越来越清晰,开发系统软件仍然需要静态语言,而应用软攀??? ?? ?o??ū件和Web网站的开发越来越适合采用动态语言。编写操作系统之类的系统软件对性能要求依然是首位的,而对于应用软件来说,缩短开发周期显然更加重要。

  由于大部分的应用软件都采用B/S结构,Web框架对于开发语言显得越来越重要,大多数的动态语言也都拥有自己的Web框架。Python的Web模型可谓五花八门,Django、TurboGear、Webware以及Quixote是其中的代表者。而对于Ruby来说,Ruby on Rails似乎就是不二选择,目前Ruby on Rails风光无限,甚至已经有很多Web网站构建在Ruby on Rails之上并取得了良好的效果,著名的javaeye就是其中的代表者。Perl的MASON名气很大,也很成熟,其实Perl本身就很适合做Web开发,只要有fastcgi,利用CPAN程序库,大部分应用都能轻松解决了。

  Ruby快速入门

  Ruby无疑是受到关注最多的动态语言, JRuby是用Java代码实现的Ruby解释器,是Ruby到Java的字节码编译器。2006年9月,Sun收购了JRuby,JRuby的核心成员Charles Nutter和Thomas Enobo也加入了Sun公司。从这次收购行为中可以看出Ruby 在Sun 战略中的地位,Ruby 很有可能成为JVM第一个支持的动态语言。

  系统学习Ruby的语言已经远远超出了本文的范畴,在这一小节里,我们将通过一些零散的小段代码感受一下Ruby语言,或许这对于Ruby入门有一定的引导作用。

  对于初学者来说,我们推荐安装Ruby Entry Package for Win32版本的Ruby,它是由马康弘先生在Cygwin版Ruby的基础上添加了安装程序后制作而成的,特别适合初学者安装使用。你可以从http://homepage1.nifty.com/arima/ruby获取安装程序。

  在安装完成后,打开DOS窗口,输入以下的命令以测试Ruby是否安装成功:

D:\>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

  如果安装成功,将如上所示打出Ruby的版本号信息。通过开始菜单->程序->Ruby-xx-yy->fxri打开Ruby的交互式窗口开始体验Ruby的魅力:


图 1 fxri界面

  Hello World

  通过puts打印出“Hello World”:

irb(main):001:0> puts "Hello World"
Hello World
=> nil

  puts在Ruby中是一个简单的打印输出命令。后面的“=> nil”表示表达式的结果。Puts总是返回nil,相当于Java的null。

  即时计算器

irb(main):006:0> 10+2
=> 12
irb(main):007:0> 3*4
=> 12
irb(main):008:0> 3**3
=> 27
irb(main):009:0> Math.sqrt(16)
=> 4.0

  正如你所看到的,你只要输入运算式并回车就可以立即得到运行结果,这相当于计算器的功能。“**”表示进行幂运算,而Math.sqrt()表示进行平方运算。Math是Ruby内建的数学模块。在Ruby中,模块将类似的方法聚集在同一个“家族”的名下。因此,Math也包括sin()、cos(攀??? ?? ?o??ū)这样的方法。计算器只能打出结果,那么我们如果引用这些结果呢?这需要使用到变量。

  将结果赋值给变量

irb(main):011:0> a = 3*5
=> 15
irb(main):012:0> b =2+3
=> 5
irb(main):013:0> Math.sqrt(a+b)
=> 4.47213595499958

  上面的代码定义了两个变量,第三行代码引用变量进行计算。

  定义方法

irb(main):015:0> def greeting_1
irb(main):016:1> puts "How are you!"
irb(main):017:1> end
=> nil

  上面的代码中第1行“def greeting”标志着方法定义的开始。它告诉Ruby当前正在定义一个名为greeting的方法。下面一行是方法体:puts "How are you!"。最后,也就是第3行“end”通知Ruby已经完成了方法的定义。Ruby通过 “=> nil”进行回应,说明已经正确定义了一个方法。

  下面的代码定义了一个带参的方法:

irb(main):021:0> def greeting_2(name)
irb(main):022:1> puts "How are you,#{name}"
irb(main):023:1> end

  “#{name}”是Ruby在某个字符串中引用变量的方法,相当于Java的"How are you"+name,你也可以为入参指定一个默认值:

irb(main):024:0> def greeting_3(name = "John")
irb(main):025:1> puts "How are you,#{name}"
irb(main):026:1> end
=> nil
要想了解更多请访问http://soft.oneedu.cn/