ruby特点:Ruby 3十 7个特点

  Ruby种为简单快捷面向对象设计而创脚本语言由日本人Yukihiro Matsumoto(外号matz)开发遵守GPL协议和Ruby LicenseRuby作者认为“Ruby > Smalltalk + Perl”表示Ruby是个语法像Smalltalk样完全面向对象、脚本执行、又有Perl强大文字处理功能语言

  1、Ruby 是面向对象语言 这意味着什么呢?有关“什么是 OOP”每十位员当中恐怕就有十 2种看法这个问题我留待您自己判断而就特征而言Ruby 提供了机制将数据和思路方法封装到对象里实现了个类到另个类继承机制还提供对象多态机制和某些语言(C、Perl 5 等等)区别Ruby 从开始时候就是以面向对象为目标来设计

  2、Ruby 是“纯正” OOP 语言 我说重复了么?我可不这么认为说“纯正”这就意味着所有切——包括串或整型的类基本数据类型——都是以对象形态来表达在 Ruby 中用不着 Java 里面提供那种 wrapper (包裹类)(译注:wrapper 用来将基本类型包装成对象类型)而且甚至连常量都被当作对象来对待因此思路方法可以由——比如数字常量——来唤起

  3、Ruby 是动态语言 对于只熟悉诸如 C、Java 等静态语言人而言这就是个新概念所谓动态意味着可以在运行期动态地追加或者重新定义思路方法和变量这种动态机制免除了对 C 语言中条件编译(#def)这类功能需要并且使构建复杂 reflection(内省机制)API 成为可能复杂 reflection 机制又进而使得可以变得更为“自知(self-aware)”——从而为如下诸多功能开启了方便的门:运行期类型信息、丢失思路方法侦测、能够侦测新追加思路方法钩子技术等等从这个方面来看Ruby 和 Lisp 和 Smalltalk 有些许亲缘关系

  4、Ruby 是解释型语言 这是个复杂问题值得多说几句有人可以争论说从性能方面来考量语言采用解释型机制弊大于利对于这种想法我用下面斟酌予以回应:1. 首先最为显著快速开发周期(rapid development cycle)颇有效益可得Ruby 解释型语言本质助长这种效益2. 太慢到底是多慢呢?说慢的前请先做些性能测试3. 尽管会有人因此而批评我但我还是要这么说:处理器每年都在持续提速4. 如果您着实需要速度您可以用 C 语言撰写需要速度那部分代码5. 最后从某种意义上说种值得商榷观点:鉴于没有哪种语言是从骨子里就被解释因此并不能说不可能撰写出 Ruby 编译器

  5、Ruby 能够处理正则表达式 多年以来正则表达式直被认为是属于 UNIX 领域雕虫小技涉及诸如 grep 和 sed 的类阳春工具或是在 vi 里面做些讨巧“查找-替换”操作Perl 语言帮助人们改变了这种看法而现在 Ruby 也对此有所帮助越来越多人认识到这种超高级串和文本操纵窍门技巧中所蕴含无比威力对此持怀疑态度者应该去读读 Jeffrey Friedl 书 Mastering Regular Expressions 非怀疑论者也应该读

  6、Ruby 是支持多种平台语言 Ruby 可以运行在 Linux 及其他 UNIX 变体、各种版本 Windows 平台、BeOS甚至 MS-DOS 上如果我没记错还有 Amiga 版本

  7、Ruby 借鉴了前辈语言 这是好事儿吗?在文学领域的外这是好事儿牛顿说“若我看得比别人远乃是我站在了巨人肩上”Ruby 确实是站在了巨人肩上Ruby 引借了来自 Smalltalk, CLU, Lisp, C, C, Perl, Kornshell以及其他语言特性我看到其中原则是:1. 不要重新发明轮子;2. 不要修补没有问题部分;3. 特别重要充分利用人们现有知识您掌握 UNIX 里面文件和管道(pipes)吗?没问题您可以在 Ruby 中运用到那些知识您花了两年时间研习 prf 各种格式符号?别担心您在 Ruby 里面还可以使用 prf您了解 Perl regex handling 技术?好那么您几乎也就立刻学会了 Ruby regex handling 技术

  8、Ruby 具创新性条和第7条有些矛盾吧?唔……是有点;每个硬币都有两面嘛Ruby 有些特征极具创新性比如非常有用 mix-in 概念或许这些创新型特征将来会被新语言借鉴(注:位读者向我指出LISP 至少早在 1979 年就有 mix-in 了点我倒是完全没有注意到;我当另寻个更好例证保证其真确性)

  9、Ruby 是特高级语言(Very High-Level LanguageVHLL) 这个问题有待商榷术语 VHLL 还未被广泛使用而其含义更是比 OOP 含义更具争议性我说“特高级”指Ruby 可以通过相对较少指令掌控复杂数据结构并对其进行复杂操作符合了被些人称为“最少投入”原则(Principle of Least Effort)

  10、Ruby 有智能垃圾收集器 诸如 malloc 和 free 的类现在只是已然过去昨夜噩梦您连析构都不需要仅此足矣

  11、Ruby 是脚本语言 不要以为 Ruby 是脚本语言所以就不强大Ruby 可不是玩具Ruby 是全功能设计语言只不过 Ruby 让传统脚本操作变得更容易撰写比如运行外部、检查系统资源、使用 pipe(管道)、截获输出等等

  12、Ruby 用处多样 Ruby 可以完成好 Kornshell 能够完成好事情也可以完成好 C 语言能够完成好事情想快速写个十行 hack 来完成次性任务或者为遗留代码写个 wrapper 吗?用 Ruby 没问题想写个 Web 服务器、CGI或者棋类游戏吗?用 Ruby 也没问题

  13、Ruby 对线程予以支持 您可以使用简单 API 撰写多线程应用即使是在 MS-DOS 上撰写也可以

  14、Ruby 是开源 想看 Ruby 源代码了?想提供个补丁建议了?只管去吧!想和智慧云集、乐于助人、包括语言设计者在内用户社区进行联络吗?可以

  15、Ruby 具有直观性(直觉性) 学习曲线平滑不陡旦入了门您是否就开始“猜测” Ruby 使用方式了呢?您猜测通常是正确(译注: Ruby 很直观符合了人们惯常期待方式)Ruby 致力于符合“最少诧异或惊讶”的原则(Principle of Least Astonishment (or Surprise)).

  16、Ruby 具有异常(exception)机制 同 Java 和 C Ruby 能处理异常这意味着少和返回代码纠缠更少嵌套 语句更少意大利面式逻辑(spaghetti logic贬义是复杂混乱代码设计比如大量使用GOTO语句等等)更好处理机能

  17、Ruby 有高级 Array 是动态;您不必像在 Pascal 等语言当中那样在编译期声明大小您不必像在 C/C/Java 当中那样为分配内存空间Ruby 是对象因此您不必时刻警惕其长度;原则上您不可能像在 C 语言当中那样“越出长度大限”想以索引、元素或者反向处理吗?想打印整个吗?Ruby 为所有这些事情提供了对应思路方法想把当作集合()、堆栈(stack)或队列(queue)来对待吗?Ruby 也为此提供了对应思路方法想把当作查找表(lookup table)来使用吗?这是个问题问得巧——您不必这样用 Ruby 提供了哈希表专门处理这个问题

  18、Ruby 是可扩展 您可以用 Ruby 或者 C 语言编写外部另外您还可以随心所欲地就地修改现存类和对象

  19、Ruby 鼓励 literate programming(字面编程方式) 您可以将注释嵌入到代码中Ruby 文档工具可以从中抽取和操纵这些注释(Literate programming 铁杆儿支持者或许会认为这是很基础东西吧)

  20、Ruby 以创新方式使用分隔符和大小写 返回 Boolean(尽管 Ruby 不这样称呼它)思路方法通常都以问号结尾而且修改数据思路方法名称带有惊叹号切都简单、明了、直观包括 名称在内所有常量都以大写字母开头所有对象 attributes 都以 @ 标记开头这种方案既有老式“匈牙利表示法(Hungarian notation)”务实性又避免了龌龊刺眼表现形式

  21、Ruby 保留字不保留 使用被称为“保留字(reserved word)”标识符是完全没有问题只要保证别让语法分析器遇到歧义情况就行这可真是畅快

  22、Ruby 支持迭代器(iterator) Ruby 迭代器使得“传递代码区块到对象中”这种操作可以经由这样方式来完成即对于、列表(list)、树(tree)等诸多结构中个元素都能够指定代码区块这是个值得深入探究威力强大窍门技巧

  23、Ruby 具有安全性特性Ruby 借用了 Perl “点缀(taing)”概念通过 $SAFE 变量实现了多种控制级别(揪心级别?)此特性对于“为了攻破 web 服务器而被利用” CGI 而言特别有好处

  24、Ruby 没有指针 类似 Java并向 C 恶狠狠地点了点头Ruby 中没有“指针(poer)”概念;不存在间接性没有指针运算没有语法和调试指针所带来头疼困扰当然这意味着真正底层系统编程变得困难了比如访问某设备控制状态寄存器;但这些系统级事务总是可以利用 C 库来完成(正如 C 员会在必要时使用汇编Ruby 员会在必要时使用 C 语言!)

  25、Ruby 关注细节 Ruby 提供丰富同义词和别名不记得对串是用 size 还是 length 吗?两个都可以用对于范围(range)是用 begin 和 end 还是 first 和 last?由您自选您心里拼写 indices 而您手却拼出 indexes 吗?两个都可以用

  26、Ruby 具有灵活语法特性 在思路方法中可以忽略括号参数的间可以忽略逗号Perl 风格引号允许我们定义串时不必劳烦去敲那些引号和逗号(译注:Ruby 中 a = [ 'ant', 'bee', 'cat' ] 可以简写为 a = %w{ ant bee cat }) 关键字也可以忽略

  27、Ruby 有丰富库可供使用 Ruby 库提供了对线程、套接字()、有限对象永续机制、CGI、服务器端可执行机制、DB 文件等许多功能支持Ruby 还对 Tk 有所支持今后会有更多支持

  28、Ruby 有调试器(debugger) 在完美世界里我们大约不需要调试器可惜这并不是完美世界

  29、Ruby 可通过交互方式来使用 Ruby 设计为可以将其当作种类似 Kornshell shell 来使用(这是本文中最令人质疑观点而且我也不得不承认Ruby 并不是真正非常优秀 shell但我还是坚持认为基于 Ruby shell 是个不错东西)

  30、Ruby 是精炼语言 Ruby 中没有非必要关键字比如 Pascal begin 的后 thenwhile 的后 do不需要事先声明变量变量无类型不需要为思路方法指定返回类型不需要 关键字;思路方法会返回最后被求值表达式的结果另外方面……Ruby 不像 C 或 Perl 那么晦涩

  31、Ruby 是面向表达语言(expression-oriented) 您可以像说话样很容易写出 x = a<0 b c end then> 这样句子

  32、Ruby 语言中系结了 syntax sugar(语法糖) (转述 Mary Poppins 话说就是:勺语法糖可以压压语义药味"A spoonful of syntax sugar helps the semantic medicine go down.")只要您想您就可以用 for a in x 来迭代遍历 x可以用 a b 来代替 a = a + b大多数操作符其实只是简化思路方法表示、更加直觉名称以及更加方便使用语法形式



  译注:Mary Poppins 指是美国1964年拍摄经典电影欢乐满人间(Mary Poppins)

  33、Ruby 支持操作符重载(overloading) 如果我没记错操作符重载源起自很久以前 SNOBOL但却是由较近 C 振兴这个机制可能会被滥用或误用但有总比没有好另外Ruby 会自动定义操作符赋值(assignment)版本比如说您定义了操作符 + 那么您就会自动得到操作符

  34、Ruby 具有无限精度整数算法 谁还关心 、long 呢? 使用 Bignum 就行了承认吧您总还是想看看365阶乘是多少现在您可以看了

  35、Ruby 具有幂运算操作符 在过去年代我们在 BASIC 和 FORTRAN 里使用过幂运算操作符但是后来我们学会了 Pascal 和 C 语言知道了这个操作符邪恶(我们被告知我们甚至都不曾知道求值是如何完成——是使用了对数还是迭代?效率有多高?)可是我们真关心这些么?如果是我们可以编写自己版本如果不是Ruby 还提供了您珍爱老好用 ** operator 供您使用享用它吧!

  36、Ruby 具有强大串处理能力 如果您想对串进行搜索、替换、修改、格式化、截断(trim)、分隔(delimit)、追加(erpose)或者字元化(tokenize)等操作您可以使用 Ruby 内建思路方法如过内建思路方法不能满足要求您可以利用内建思路方法来建构自己所需

  37、Ruby 几乎没有违反自身规则例外情况 Ruby 语法和语义比大多数语言更具自我完备性(self-consistent)每种语言都有犄角旮旯每种规则都有例外情况;但 Ruby 旮旯和例外可能比您想象要少



Tags:  ruby教程 rubyday rubyonrails ruby特点

延伸阅读

最新评论

发表评论