Java灰头土脸,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值