满久之前看过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!