满久之前看过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
分享到:
相关推荐
练习的重点是Java和Ruby语法的比较。 您应该认识到异同并习惯它们。 使用spec文件夹中的RSpec规范测试您的实现。 克隆练习存储库,解决问题,然后重新签回解决方案。 一个成功的呼叫如下所示: spec binary_tree_...
Ruby也许是一个脚本语言改进的榜样,也许又一种面向对象的脚本的Show,也许是大家尝试新技术的一种热情,,但真的让我Fram java to Ruby ,理由太薄弱的,即便的确挺好玩的。 看来,用语言,有时候还看场景。。Java会...
这个是ruby的集成开发环境,适合ruby新手直接上手使用进入编程;就是类似Microsoft Visual Studio 2010那样方便的ruby编程开发工具,关键词...如需java的jdk,我的资源里提供了与之匹配的“Java JDK6u43官方版.zip”。
这个是ruby的集成开发环境,适合ruby新手直接上手使用进入编程;就是类似Microsoft Visual Studio 2010那样方便的ruby编程开发工具,关键词...如需java的jdk,我的资源里提供了与之匹配的“Java JDK6u43官方版.zip”。
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...
可扩展性:Ruby 可以通过 C 或 Java 扩展,以利用这些语言的性能优势。 社区和库:Ruby 有着活跃的社区和丰富的库资源,例如 Rails 框架,使得构建 Web 应用变得非常简单。 Ruby 的用途 Web 开发:Ruby 最著名的...
中间的Io和prolog就被华丽丽的跳过了,因为prolog语法太奇葩,Io有没什么好的资料可以看,尽管我觉的Io应该会是一个强大的工具,而且语法超级简单。对象模型比起JavaScript好的不是一点两点,clone关键字真是为原型...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发...
ruby程序安装文件Ruby是一种动态的,侧重于简单个高效的开源语言,他是一个优雅的语法,能够很自然的阅读和编写,适合于快速开发,一般开发效率是JAVA的5倍。
请说明Ruby变量声明和赋值的语法。 3. Ruby中常用的数据类型有哪些?请列举几种常见的Ruby数据类型。 4. Ruby中如何进行条件判断和控制流程?请列举几种条件判断和控制流程的语句。 5. 什么是Ruby中的字符串(String...