`
tuoxie007
  • 浏览: 160286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java灰头土脸,ruby语法之妙

    博客分类:
  • ruby
阅读更多

满久之前看过ruby的语法,感觉很奇幻,或者说不赞同。ruby语法给我的感觉是有些东西在别的语言中只有一种写法,但到了ruby里却有很多中写法,当时的我还沉浸在Java所谓得语法设计的简单性的思维里,认为这些可有可无的东西只会增加语法的复杂度而无其他一点别的作用。

时过境迁的我在大面积使用js的时候,渐渐明白了为什么jquery可以设计出如此优雅的API,而ruby的优雅多于js很多,再回头看看Java,简直灰头土脸。

我无数次的抱怨为什么Java里我要写

if(somevalue != null){

...

}

而不是

if(someValue){

...

}

为什么我要写

if(someString == 'str1'){

...

}else if(someString == 'str2'){

...

}else if(someString == 'str3'){

...

}

而不是

switch(someString){

  case str1:

  ...

  case str2:

  ...

  case str3:

 ...

  default:

  ...

}

为什么我要写

button.addActionListner(new ActionListner(){

    doActionPerform(ActionEvent event){

    ....

    }

});

而不是

button.listner = function(event){

...

}

为什么我要写

Map<String, String> map = new HashMap<String, String>();

map.put('k1', 'v1');

map.put('k2', 'v2');

map.put('k3', 'v3');

而不是

Map map = {'k1':'v1', 'k2':'v2', 'k3':'v3'};

为什么我要写

class SomeClass{

    private String name;

    public void setName(String name){

        this.name = name;

    }

    public String getName(){

        return this.name;

    }

}

而不是

。。。

 

再回想ruby的语法,才明白当初ruby的设计者或许也有很多跟我类似的抱怨。事实上我对Java的抱怨远不止这么多。

 

此文是我再次看了ruby的语法之后的一点总结,只是记录了我觉得ruby语法中与众不同的地方,严重强调:

不可当作教程一类的东西。

希望这一系列的文章还能继续下去。

 

ruby是弱类型,所以变量不需要声明类型

somevalue = 'some string'

 

ruby里一切都是对象,连一个数值也是,所以你可以

12.5.class

 

ruby中用#来注释代码

 

ruby中用.来调用成员,类似与Java

 

ruby中可以用;来分隔语句,也可以用换行附分隔

 

ruby中代码缩进可有可无

 

ruby中调用无参方法可以不用()

 

ruby中有参方法调用可以放在()里,也可以不写()而直接跟在后面

所以可以写

print 'foobar'

 

ruby中以!结尾的方法是具有破坏性的方法,例如:

fox.upcase #返回大写字母

fox.upcase! #修改为大写字母并返回

 

ruby中以?结尾的方法表示疑问,返回true或false,例如:

fox.empty?

fox.is_a? String

 

ruby中这样实例化类:

car = Car.new

 

ruby中类的成员变量定义以@开头

@name='tuoxie'

 

ruby中Class级别的成员(有点象Java的静态变量,其实不一样)以@@开头

@@count = 0

 

ruby中定义类的成员函数以def开头

def start

    ...

end

 

ruby中方法的最后一个变量自动返回,当然也可以手动return

 

ruby中类的成员变量不能倍外部访问,要以方法的形式向外提供读写

 

ruby中get set的简单写法

class Car

  @size = 0

  def size=(s)

    @size = s

  end

 

  def size

    @size

  end

end

这样调用

car.size = '2x3'

puts car.size

 

ruby中Class级别的方法声明

def self.jump

...

end

 

ruby中没有++,--

 

print不换行,puts换行

 

ruby中的数组

array = [1, 2, 3]

array = %w(red, blue, black) 等价于 array = ['red', 'blue', 'black']

array.delete 'black'

 

ruby中的键值对

map = {'k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3'}

map.empty?

map.keys

map.values

 

ruby中的字符串

str = 'I\'m a big fish'

str = "An said, \"I'm a big fish\""

str = '%Q(An said, "I'm a bif fish")

str = "now is: #{Time.now}" #  #{}可以替换里面的内容到字符串

"dog cat fish".gsub('cat', 'mimi') #replace

"dog cat fish".include?('dog')

"dog cat fish".slice(0, 3) #返回"dog"

 

ruby中的数字

23.class #返回 Fixnum,就是int

2.3.class #返回Float

23.integer? #true

0.zero?

34.to_f

3.4.to_i

 

ruby中的符号,没太明白是干吗的,但有写例子:

map = :k1 => 'v1', :k2=>'v2', :k3=>'v3 #定义一个键值对

"fox".to_sym #字符串转换为符号

:fox.to_s #同上相反

 

ruby中条件判断

if ...

...

end

if ...

...

else

...

end

if ...

...

elsif ...

...

end

unless ...

...

end

unless ...

...

else

...

end

puts 'foobar' if foo = bar

 

ruby的迭代

while ...

...

end

#

until ...

...

end

#

for .. in ..

...

end

#

ruby中的块

[...].each do |..|

...

end

#

{...}.each do |..=>..|

...

end

#

5.times{...}

 

写的很乱,仅供参考。

 

over!

 

本人新博客:tuoxie.me

3
0
分享到:
评论
6 楼 easylife 2010-08-15  
没钱 ubuntu + netbeans
有钱 mac_os + textmate
5 楼 tedeyang 2010-08-14  
tuoxie007 写道
tedeyang 写道
呵呵,我初学ruby,现在还很手生,主要是没有惯用的IDE,代码提示,文档,重构等等
能介绍一下你常用的ruby开发环境和绝招吗?

看不出来我也是新手?


一起学习,有什么心得多在blog写写,我经常来看.
4 楼 tuoxie007 2010-08-14  
tedeyang 写道
呵呵,我初学ruby,现在还很手生,主要是没有惯用的IDE,代码提示,文档,重构等等
能介绍一下你常用的ruby开发环境和绝招吗?

看不出来我也是新手?
3 楼 tedeyang 2010-08-14  
呵呵,我初学ruby,现在还很手生,主要是没有惯用的IDE,代码提示,文档,重构等等
能介绍一下你常用的ruby开发环境和绝招吗?
2 楼 tuoxie007 2010-08-14  
tedeyang 写道
写得不错.

java不用switch(Object)纯粹是为了性能,基本类型不是对象,也是为了性能,编译语言的优势还是很强大的,静态检查,语法简单,有利于进行编译期优化和IDE设计.
所以你看,一个神奇的Delphi编译器就让pascal的性能提升了上百倍,直接造就了borland,而代码还是那代码,gcc类似,编译器能奇迹性地提升所有老代码的性能.
类似的奇迹技术还有jvm,
ruby现在在虚拟机上还是太差了.

动态语言现在之所以能越来越流行,是源于现代运行时技术的进步和现代IDE的发展,ruby这些语法都不是新鲜事,perl,lisp,python,早就存在了.


老兄你说的这些我又何尝不知,对于运行效率和开发效率之争由来已久,没有必要讨论
作为程序员,掌握一门技术,在不同需求下我们可以有不同的选择
作为技术爱好者,我希望能找到一个平衡点,其实Java也在变,ruby也在变,我期待着ruby的效率象Java一样快,Java开发能象ruby一样cool

对于你ruby的语法确实不是新鲜事,我个人觉得python甚至更cool些,但rails只有一个。
1 楼 tedeyang 2010-08-13  
写得不错.

java不用switch(Object)纯粹是为了性能,基本类型不是对象,也是为了性能,编译语言的优势还是很强大的,静态检查,语法简单,有利于进行编译期优化和IDE设计.
所以你看,一个神奇的Delphi编译器就让pascal的性能提升了上百倍,直接造就了borland,而代码还是那代码,gcc类似,编译器能奇迹性地提升所有老代码的性能.
类似的奇迹技术还有jvm,
ruby现在在虚拟机上还是太差了.

动态语言现在之所以能越来越流行,是源于现代运行时技术的进步和现代IDE的发展,ruby这些语法都不是新鲜事,perl,lisp,python,早就存在了.

相关推荐

    ist的matlab代码-rails_lecture_lesson_java2ruby:练习的重点是Java和Ruby语法的比较。您应该认识到

    练习的重点是Java和Ruby语法的比较。 您应该认识到异同并习惯它们。 使用spec文件夹中的RSpec规范测试您的实现。 克隆练习存储库,解决问题,然后重新签回解决方案。 一个成功的呼叫如下所示: spec binary_tree_...

    Pragmatic - From Java to Ruby jun 2006

    Ruby也许是一个脚本语言改进的榜样,也许又一种面向对象的脚本的Show,也许是大家尝试新技术的一种热情,,但真的让我Fram java to Ruby ,理由太薄弱的,即便的确挺好玩的。 看来,用语言,有时候还看场景。。Java会...

    ruby免费ide集成开发环境netbeans-6.9.1第二个压缩包

    这个是ruby的集成开发环境,适合ruby新手直接上手使用进入编程;就是类似Microsoft Visual Studio 2010那样方便的ruby编程开发工具,关键词...如需java的jdk,我的资源里提供了与之匹配的“Java JDK6u43官方版.zip”。

    ruby免费ide集成开发环境netbeans-6.9.1第一个压缩包

    这个是ruby的集成开发环境,适合ruby新手直接上手使用进入编程;就是类似Microsoft Visual Studio 2010那样方便的ruby编程开发工具,关键词...如需java的jdk,我的资源里提供了与之匹配的“Java JDK6u43官方版.zip”。

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    Ruby语言教程.docx

    可扩展性:Ruby 可以通过 C 或 Java 扩展,以利用这些语言的性能优势。 社区和库:Ruby 有着活跃的社区和丰富的库资源,例如 Rails 框架,使得构建 Web 应用变得非常简单。 Ruby 的用途 Web 开发:Ruby 最著名的...

    Ruby学习笔记

    中间的Io和prolog就被华丽丽的跳过了,因为prolog语法太奇葩,Io有没什么好的资料可以看,尽管我觉的Io应该会是一个强大的工具,而且语法超级简单。对象模型比起JavaScript好的不是一点两点,clone关键字真是为原型...

    java开源包4

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包11

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包101

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包6

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包9

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包5

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包8

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包10

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包3

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    java开源包1

    你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...

    ruby程序安装文件

    ruby程序安装文件Ruby是一种动态的,侧重于简单个高效的开源语言,他是一个优雅的语法,能够很自然的阅读和编写,适合于快速开发,一般开发效率是JAVA的5倍。

    Ruby常见面试题.pdf

    请说明Ruby变量声明和赋值的语法。 3. Ruby中常用的数据类型有哪些?请列举几种常见的Ruby数据类型。 4. Ruby中如何进行条件判断和控制流程?请列举几种条件判断和控制流程的语句。 5. 什么是Ruby中的字符串(String...

Global site tag (gtag.js) - Google Analytics