中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
迈出第一步-grep(2)
作者:佚名 时间:2007-09-24 16:18 出处:Ruby中文社区 责编:月夜寒箫
              摘要:迈出第一步-grep(2)

第3行变化较大。首先,if的形式变了。Ruby中的if有两种表达形式(意义相同)。第一种是后置形式,前面的程序即是如此。第二种就是该程序中出现的前置形式,以end结束。另外,前置形式中还有else部分,可以指定当条件不成立时程序应该执行的代码部分。后置形式中没有else部分。

其次,if的条件部分(if和then之间的部分)也变了。条件部分中出现的正则表达式可看成是和变量$_进行比较的简略写法。这次的程序没有对此进行省略。=~是比较字符串和正则表达式时使用的操作符。

最后一个不同是这次指定了print的参数。当print的参数被省略时,将输出变量$_的值。

第4行也没有变化。

现在看一下这个程序的运行速度。

% time ruby /tmp/grep0.rb ruby /usr/dict/words

ruby

5.89user 0.25system 0:06.17elapsed

这种程序在i486DX4 75MHz的环境下竟然用了6秒多,真的有点慢呀。下面再和普通的grep比较一下。

% time grep ruby /usr/dict/words

0.03user 0.06system 0:00.13elapsed

嗯,还是慢呀。要说Ruby慢也情有可原。毕竟Ruby是解释型语言,和经过编译的专用程序grep比起来还是慢一些。话虽如此还是觉得太慢,下面就把程序提速一下。

这就是提速后的程序grep1.rb:

1  $pat = /#{ARGV.shift}/

2  while gets

3     print if $_ =~ $pat

4  end

第1行和第3行变了。不再每次都重新生成正则表达式(默认情况下,//每次都重新生成正则表达式对象),而是将正则表达式赋值给变量后反复利用,因此程序速度得到提升。

若if的条件表达式不是正则表达式的话,就不会自动和变量$_进行比较,所以必须使用‘=~’进行比较。

% time ruby /tmp/grep1.rb ruby /usr/dict/words

ruby

2.26user 0.12system 0:02.39elapsed

运行时间大约缩短了一半,即使如此,比起grep来还是太慢了。

那么,这个“磨磨蹭蹭”的grep程序还有什么意义呢?编程虽然简单,但是比普通的grep慢那么多,好像没什么用处呀!

这个程序的存在意义就在于它是由这四行代码构成。也就是说,您可以简单地扩展其功能。而用C语言编写的专用程序grep就不行,充其量也只能靠选项来调整部分功能罢了。

例如,我们可以再写一个反显符合条件部分的程序。

1  st = "\033[7m" # 反显开始转义序列

2  en = "\033[m"  # 反显结束转义序列

3

4  $pat = /#{ARGV.shift}/

5  while gets

6     if $_ =~ $pat

7        # 在符合条件部分的前后置入转义序列

8        gsub! $pat, "#{st}\\&#{en}"

9        print

10    end

11 end

程序变得有些复杂了,但这样就能把符合条件的部分反显出来。Ruby就是那种可以轻松地实现您所追求的功能的理想工具。

虽然她的运行速度稍慢,但您可以迅速快捷的编程运行并得到结果。从整体上来看,这往往可以助您提早达到目标。这正是以Ruby为代表的脚本语言的强项。若您的开发项目对于运行速度要求很高的话,您可以多花些时间再提高程序的运行速度。

下面,我们来总结一下刚才所学的东西:

◆Ruby语言是解释型语言。

◆使用Ruby可以轻松地编写出功能复杂的程序。

◆Ruby的开发速度快过C等语言,但运行速度慢。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有