从 Java 到 Ruby

Java 已经很成熟,经过了测试,而且速度很快(与那些仍然反对 Java 的人所宣称的相反)。但它的代码也很冗长。从 Java 转到 Ruby,你会发现代码量会大大减少。你也会发现构建快速原型所需的时间也会减少。

相似之处

和 Java 一样,在 Ruby 中,...

  • 内存通过垃圾回收器进行管理。
  • 对象是强类型的。
  • 有 public、private 和 protected 方法。
  • 有嵌入式文档工具 (Ruby 的称为 RDoc)。RDoc 生成的文档看起来与 javadoc 生成的非常相似。

不同之处

与 Java 不同,在 Ruby 中,...

  • 你不需要编译代码,可以直接运行。
  • 有几种不同的流行第三方 GUI 工具包。Ruby 用户可以尝试 WxRubyFXRubyRuby-GNOME2QtRuby Tk 等。
  • 在定义类等内容后,你使用 end 关键字,而不是像 Java 那样用大括号包裹代码块。
  • 你使用 require 而不是 import
  • 所有成员变量都是私有的。从外部,你通过方法访问所有内容。
  • 方法调用中的括号通常是可选的,并且经常被省略。
  • 一切都是对象,包括像 2 和 3.14159 这样的数字。
  • 没有静态类型检查。
  • 变量名只是标签。它们没有与之关联的类型。
  • 没有类型声明。你只需根据需要分配新的变量名,它们就会“突然出现”(例如 a = [1,2,3] 而不是 int[] a = {1,2,3};)。
  • 没有类型转换。直接调用方法即可。你的单元测试会在你运行代码之前告诉你是否会看到异常。
  • 使用 foo = Foo.new("hi") 而不是 Foo foo = new Foo("hi")
  • 构造函数始终命名为 “initialize”,而不是类的名称。
  • 你有 “mixins” 而不是接口。
  • YAML 往往比 XML 更受青睐。
  • 使用 nil 而不是 null
  • ==equals() 在 Ruby 中有不同的处理方式。当你想要测试 Ruby 中的等价性时,使用 == (相当于 Java 中的 equals() )。当你想要知道两个对象是否相同时,使用 equal?() (相当于 Java 中的 == )。