玩玩ruby之路在脚下——新手入门篇
终于下定决心,学习ruby了,对这种新的语言感到很是兴奋。压抑住内心的喜悦简单介绍一下它的下载安装方式。(1)下载地址:
http://www.rubyonrails.org/down
我使用的系统是windows,自然是选择 Windows installer
ruby在我看来很多地方都不太成熟,就拿安装方式来说,缺少图形化的指引界面,据说以前的安装方式更加愚蠢,还好有了RubyGems的出现,一切变得有些简单了。
(2)安装
1.安装ruby
最直接的安装方式了,一直next到最后结束为止(最新的版本是 1.8.4 (2006-04-14))。
2.安装RubyGems
在命令行中运行“ruby setup.rb”即可
3.安装rails
有了rubygems的帮助,安装rails就变得简单些了。启动命令行窗口,输入“gem install rails –remote”,剩下的时间就是等待,由于这是采用在线安装,所以安装的速度就取决于你的网速了,呵呵。
学java时就习惯了操作dos窗口,所以对这种往往要操作命令行的方式并没有太大的排斥,倒是那些.net的新手会有些不适应,毕竟一个新的平台还需要很多的人来支持,想当初java的使用往往也是通过操作命令行的。
(3)简单的使用一下ruby
装完了之后,你一定和我一样迫不及待的想尝试一下ruby的魅力所在。但是先不要急,首先确认一下ruby是否已经真正的安装成功。启动命令行,输入“ruby -v”,如果得到的信息类似如下:
ruby 1.8.4 (2006-04-14) [i386-mswin32]
说明你的系统中已经可以使用ruby了。
好的,让我们来初步接触一下ruby。这个时候大多数人想到的是写一个hello,world的程序了解一下ruby的基本语法,呵呵,其实不用的,在命令行中输入:
ruby
print "hello,world!"
^D
这个时候就可以见到大家熟悉的"hello,world"了。发现了ruby的神奇了吧,不错,ruby作为一种脚本语言具有很独特的魅力。当然了,你也何以定制自己的ruby程序的,新建一个文件,取名为test.rb,输入以下内容:
print("测试")
好了,将命令行转至test.rb所在的目录,输入test,就可以看到ruby输出中文"测试"了。
结束了无聊的事情之后,让我们开始真正的了解ruby,结合自己的所学,这里重点介绍一下ruby和java在语法上的不同:
<1>字符串:
java中的字符串一律用""来表示,''只是用来描述字符的,在ruby中""和''都是来表示字符串的,所不同的是""所表示的字符串会经过转义处理,比如print "\n测试",输出的结果是:
测试
而print '\n测试',输出的结果是:
\n测试
从上面的代码可以简单看出在""中"\n"被用作了换行,而在''中"\n"被作为了一般的字符串处理。
<2>变量作用域的声明:
<3>特殊的数组:
java中的数组元素类型必须是一样的,在ruby中,他们可以是不一样的。比如可以这样定义一个数组:
a=[2000," Allex", true,"50"]
数组元素的引用也很特别,a[0]很显然吧,那么a[0,2]呢,还有a[0..2]呢,呵呵,写一段代码测试一下哈:
print a[0,2] 结果是: 2000allex
print a[0..2] 结果是: 2000allextrue
a[0,2]相当于substring,但是又和java中的substring不一样,它的使用和oracle中的substr是完全一样的,后面的2指子串的长度;a[0..2]意思是指从0到2的元素,呵呵,有点神奇吧,还有更神奇的事情呢,a[-1]是什么呢?呵呵,测试发现a[-1]打出来的是50,有此可见,ruby中对数组的引用可以采用负数,区别是反向引用,这为我们有时编程带来了极大的便利。那么这种引用方式是否会避免让人深恶痛绝的越位异常呢,写段代码测试先:
print a[4] 结果是: nil
print a[-5] 结果是: nil
这里打印的nil就是和java中的null是一个意思呀,完全明白了吧,也发生了让人讨厌的越位异常,55~~
<4> 哈希表
哈希表作为一种极为常见的数据形式自然是得到了ruby的支持,写段代码简单说明下:
h = {1 => 2, "2" => "4"}
print h[1]
print h["2"]
pring h[2]
打印出的结果是:24nil,所以千万不要搞混了,[]中的是key,不要和数组混淆了。
(4)ruby的神奇之处:
<1>万物皆对象:
和java中的基本类型不一样的是,ruby中的所谓基本类型也是对象(具有属性和行为),举个例子,-1在java中是基本类型,为了获得它的绝对值,需要如下调用Math.abs(-1),这里的处理完全是一种非对象的方式,在ruby中这些“基本类型”也是对象,它们和其它的对象没有任何区别,因此作为对象的-1完全有理由知道自己的绝对值,哈哈,所以如下调用-1.abs()是完全正确的。
<2>聪明的ruby
在java中如果要把"abs"翻倍成"absabs",需要比较复杂的逻辑,而在ruby中只需"abs"*2即可。
<3>超长的数字支持能力
ruby可以处理的数字长度惊人,写个例子描述一下哈:
def jiecheng(n)
if n == 1
1
else
n * jiecheng(n - 1 )
end
end
print jiechen( 700 )
这里是计算700的阶乘,显示的结果如下:
if n == 1
1
else
n * jiecheng(n - 1 )
end
end
print jiechen( 700 )
24220401247502721798678750938123522185909833857292072994506796649299381602156474
20444519051666484819249321456671497049842327525093874817343838393757631459228450
82849997227127414016031105783055846363633712407933244782073928110103711266538753
71807902575779192731082629169047504052350550600840122194928923756351362966220200
23178109619818046179906897450420548912610870589088056503913584562211037693288782
96090019507413099979903597071143627933909429203286626049637582546142772755571000
30077529061414706395743900249885149142644498650064588732269519418995459703339103
51588559232940829569276986080222200289966128343931630028789203382654749603473516
31476526277225717115468671686281418472874118714793634950165319745745566041313450
60491220449470526233846820888647906733095692923842156117880142749549059141483623
03226200246816441301934846080254998647325270606104512088058712293349862185399243
30905429957638171880624723819523260464261432989407063616375367209123275161237834
82738407578735677175328792425183371195406029436094116293490095660437208367374010
90882392975031224612531245642687296717053747734506443314924558119560479901478736
20955692516151773711039975473055185406632842001472865789628693652378708020647632
71571364413187734327510072631080569582516938112809572432024601571117786174726837
61623869704457588005158037495665069625778930898095725794710701639238231528115579
61912028737868923893433519850866593391725714397527770759059751198934506870173594
01696725618647131071150167473689926901160826337621723466889698408625172643840000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000
20444519051666484819249321456671497049842327525093874817343838393757631459228450
82849997227127414016031105783055846363633712407933244782073928110103711266538753
71807902575779192731082629169047504052350550600840122194928923756351362966220200
23178109619818046179906897450420548912610870589088056503913584562211037693288782
96090019507413099979903597071143627933909429203286626049637582546142772755571000
30077529061414706395743900249885149142644498650064588732269519418995459703339103
51588559232940829569276986080222200289966128343931630028789203382654749603473516
31476526277225717115468671686281418472874118714793634950165319745745566041313450
60491220449470526233846820888647906733095692923842156117880142749549059141483623
03226200246816441301934846080254998647325270606104512088058712293349862185399243
30905429957638171880624723819523260464261432989407063616375367209123275161237834
82738407578735677175328792425183371195406029436094116293490095660437208367374010
90882392975031224612531245642687296717053747734506443314924558119560479901478736
20955692516151773711039975473055185406632842001472865789628693652378708020647632
71571364413187734327510072631080569582516938112809572432024601571117786174726837
61623869704457588005158037495665069625778930898095725794710701639238231528115579
61912028737868923893433519850866593391725714397527770759059751198934506870173594
01696725618647131071150167473689926901160826337621723466889698408625172643840000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000
(5)ruby之根本:
Ruby是一种简便快捷的面向对象编程的脚本语言.Ruby可以(像Perl一样)进行文本处理及系统管理,其功能十分丰富.同时,Ruby简单易懂,便于扩充.
Ruby有下列特点.
<1>解释器
Ruby是解释型语言,因此执行程序时无需编译.
<2>变量无类型(动态地确定类型)
Ruby的变量可以接收各种类型的数据,因此没有必要担心变量类型的问题.另一方面,这弱化了编译检查的功能.
<3>无需声明变量
Ruby中无需声明变量即可使用.可以根据变量名分辨变量的种类(局部变量,全局变量,实例变量等).
<4>内存管理无需用户干预
Ruby自动进行内存管理.解释器内置的垃圾回收器会自动回收不再使用的对象.
<5>一切都是对象
从一开始Ruby就被设计成为纯粹的面向对象语言.包括整数这种基本的数据类型在内所有数据都被看是对象,进而得到统一的处理.
<6>类,继承,方法
Ruby当然具有面向对象语言的基本功能,包括类,继承和方法等.
<7>特殊方法
可向某对象添加方法.例如,可以把GUI按钮被按下时的动作作为方法记述下来,还可以用它来进行原型库(prototypebase)的面向对象编程(只要您想这样的话).
<8>使用模块进行糅合(Mix-in)
Ruby认为多重继承会导致问题复杂化,因此故意舍弃了多重继承,但可以使用模块超越类的界限来共享数据和方法等.这就是"Mix-in"糅合功能
<9>迭代器
迭代器功能可以将流程控制结构抽象化.
<10>闭包
可以将某过程片段对象化,对象化后的该过程片段就称作闭包.
<11>功能强大的字符串操作/正则表达式
以Perl为样板创造出了功能强大的字符串操作和正则表达式检索功能.
<12>超长整数
内置了处理超长整数的功能,所以只要内存允许就可以计算非常大的整数.例如计算400的阶乘等也轻而易举.
<13>异常处理功能
异常处理功能可以使您编写代码处理异常情况.
<14>可以直接访问OS
Ruby可以使用(UNIX的)绝大部分的系统调用.即使单独使用Ruby也可以进行系统编程.
<15>动态加载
若OS支持的话,可以在运行时读入对象文件.
本篇完,敬请关注下篇:ruby on rails