ruby的语法真的方便么

ruby的语法真的方便么

今天看到一个sp是这样的

[Copy to clipboard] [ - ]
公共论坛,建议楼主再发帖之前,先吃点西瓜霜
喉咙没有问题,谢谢,如果这样的容不下,没什么好说的
我们欢迎讨论问题,各人发表自己的看法,尽量保持文明,大家都是有素质的白领嘛,呵呵。

我也是一个用过多年静态语言的.Neter,从vs2002就开始了,但是现在每当我在.Net下编码的时候,Console.WriteLine我就不由自主的想念puts..p..pp...多简单,每当我要写一个类来定义区间,然后判断某个点是否落在这个区间的时候,我就想念Ruby的 1..10,多么的自由。

还有昨天我尝试用Delegate来模拟block,结果比较失败,变成四不象。:D
个人的观点:看似RUBY语法“散漫”,但是,是符合思维习惯的“自由”,楼主所举之例,在RUBY中就是最后一个在方法中执行的语句的结果,个人觉得还是挺符合习惯的,像C++里面的RETURN,以前的确是写得挺多的,但除了为了在方法执行的过程中途退出,大多数情况都是最后一个被求值或赋值的语句。
我的观点:Ruby接近自然语言,不要和其他的语言比较,要和人类中的英语比较一下。
Ruby会是个过渡语言,将来会出现更高级的语言。。。更接近于自然语言。。。
我觉得做这种语言之争毫无意义,作为学习者,喜欢就去学,不喜欢你可以不学,有什么好骂的,你骂的在大声,人家该用ROR的照样用ROR。
你更适合搞.net,建议你别学Ruby了。
那什么张老师是谁啊?没听说过
目前ROR的领域就是web,谁要把他放到工业生产啊,非要用ROR的弱势来和别的语言的优势比。自己有点分辨力吧。有自己的思想才重要。
引用:
Ruby,一种为简单快捷面向对象程序设计而创的脚本语言,由日本人Yukihiro Matsumoto(外号matz)开发,遵守GPL协议和Ruby License。Ruby的作者认为“Ruby > Smalltalk + Perl”,表示Ruby是一个语法像Smalltalk一样完全面向对象、脚本执行、又有Perl强大的文字处理功能的程序语言。

 1.

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

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

  Ruby 是动态语言。 对于只熟悉诸如 C++、Java 等静态语言的人而言,这就是个新概念。所谓动态意味着,可以在运行期动态地追加或者重新定义方法和变量。这种动态机制免除了对 C 语言中条件编译(#ifdef)这类功能的需要,并且使构建复杂的 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 中运用到那些知识。您花了两年时间研习 printf 的各种格式符号?别担心,您在 Ruby 里面还可以使用 printf。您了解 Perl 的 regex handling 技术?好的,那么您几乎也就立刻学会了 Ruby 的 regex handling 技术。
 8.

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

  Ruby 是特高级语言(Very High-Level Language,VHLL)。 这个问题有待商榷,因为术语 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 能处理异常。这意味着少与返回代码纠缠,更少的嵌套 if 语句,更少的意大利面式逻辑(spaghetti logic,贬义,指的是复杂混乱的代码设计,比如大量使用GOTO语句等等),更好的错误处理机能。
 17.

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

  Ruby 是可扩展的。 您可以用 Ruby 或者 C 语言编写外部程序库。另外,您还可以随心所欲地就地修改现存的类和对象。
 19.

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

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

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

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

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

  Ruby 没有指针。 类似 Java,并向 C++ 恶狠狠地点了点头,Ruby 中没有“指针(pointer)”概念;不存在间接性,没有指针运算,没有语法和调试指针所带来的头疼困扰。当然,这意味着真正底层的系统编程变得困难了一些,比如访问某设备的控制状态寄存器;但这些系统级事务总是可以利用 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 })。return 关键字也可以忽略。
 27.

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

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

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

  Ruby 是精炼的语言。 Ruby 中没有非必要的关键字,比如 Pascal 的 begin,if 之后的 then,while 之后的 do。不需要事先声明变量,因为变量无类型。不需要为方法指定返回类型。不需要 return 关键字;方法会返回最后被求值的表达式之结果。另外一方面……Ruby 不像 C 或 Perl 那么晦涩。
 31.

  Ruby 是面向表达的语言(expression-oriented)。 您可以像说话一样很容易写出 x = if a<0 b c end else 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 具有无限精度的整数算法 谁还关心 short、int、long 呢? 使用 Bignum 就行了。承认吧,您总还是想看看365的阶乘是多少。现在您可以看了。
 35.

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

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

  Ruby 几乎没有违反自身规则的例外情况。 Ruby 的语法和语义比大多数语言更具自我完备性(self-consistent)。每种语言都有犄角旮旯,每种规则都有例外情况;但 Ruby 的旮旯和例外可能比您想象的要少。
这种帖子还是少发,语言之争是毫无意义的。。。
引用:
axgle 发表于: 2007-7-07 20:23 来源: Ruby Community
ruby是基于行的语言,如果一个语句只占一行,那么可以省略分号.
ruby的方法定义中,如果是无参方法,那么可以省略括号.如果你不需要提前return,那么最后一个语句就自动return.因此,方法定义里的return就可以省略.

因此,用ruby,你可以不写分号,不写括号,不用return.这样就可以把自己的注意力更多的放在真正要解决的问题上.

CODE:
def run
 "running..."
end

puts run

CODE:
def run()
 return "running...";
end

puts run();这样也可以,不过多了两个括号,两个分号,和一个“return”



因为run()返回的是字符传对象,而这个对象有size()方法,所以可以这么使用

CODE:
puts run().size();不要括号,不要分号的写法如下:

CODE:
puts run.size很明显第二种方式给人的感觉更"OO"---run是个方法,但看上去它更象是个对象,这个对象有size方法。
因为ruby强制你的方法返回值,你不return的话就把你的最后一个语句作为返回值,要是你的方法定义里什么语句也没有,那么就返回“nil”,一个表示“什么也没有”的对象---依然返回了一个“东西”,只不过这是个表示“什么也没有”的东西,类似于其他语言里的"null",但却是一个对象。

CODE:
def nothing
end
puts nothing.nil?可见,只要你使用ruby定义方法,这个方法必然存在一个返回数值.因此,你妄图定义一个方法,使得这个方法不返回任何值---是完全不可能的!~你无法作到不返回某个值.最极端的情形下也要返回一个nil.---返回的任何值都是对象,包括nil,因此这是完全彻底的OO的一个体现.作为一个回报,你可以在ruby里连续dot,在任何时候都可以形成一个方法调用链,一行代码解决问题!!~~~

例如:

CODE:
puts run.size 这样是可以的,但不是完全的方法链.你也可以这样

CODE:
run.size.display display方法会负责对象的显示.这就是"连续dot,一行代码"的意思
最新回复

skyover at 2007-7-07 21:14:18
  这个好像与Ruby的命名规则有关系,如果是Run而不是run,那么Ruby会首先认为这是一个类名或者是一个常量。
  如果是小写,会先判断是不是方法,然后再看是否是属性。

  PS:我现在也爱上了这种方法了。呵呵,感觉比较轻松,但有的时候括号还是必不可少的,如果有方法有带参而且还要对返回值进行调用方法的时候,例如:

  CODE:
  require 'pp'

  def foo(zoo)
   puts zoo
  end

  #这样是不行的
  foo "zoo".display
  #必须使用括号
  foo("zoo").display

  #这样也可以执行?不过这样不太清晰。
  pp foo "zoo"
java user 2 years,对ruby仅仅一开始不习惯而已。
比如,自己有段时间很懒惰于是就这样写代码
####################
line1    t = T.new

line2    p t
####################
无法想象将来如何看这段代码。

不过,自由的好处就是,你也能自己让自己不自由

另外,吸引许多人的,大概是Rails的agile development.

这个实在是太快了,MVC。看他们的代码演示,开发真正能做到少量代码量,多调试。更能贴切客户需求。

youtube上有一个例子,大概是把mysql轻易的oracle了,程序员轻松的beach了。如果能这样,自由的代价是值得的。

对于许多.neter,mssql似乎是很不自由的选择之一。

而我将来对ruby的态度,取决于开源对他的支持度,开源似乎自由一点。
ruby的代码很好理解啊。。。看一些开源的东西,很好理解,比看java那些开源的东西容易多了。。。
怎麼我個人認為語法多樣性是每個動態語言的缺點?
Perl更扯,三個月前寫的程式,三個月後會看不懂
你怎不要去罵Perl?

每個語言都有不一樣的地方,難道你每個語言都要罵過一遍嗎?
這就是特性!這就是不一樣!
花點時間記下有啥差?真這麼計較你那腦容量嗎?

Ruby已經限制太多了,難道還要繼續限制下去?
那不如回頭用Java,用.Net就好了?