`
tuoxie007
  • 浏览: 162727 次
  • 性别: 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,早就存在了.

相关推荐

    From Java to Ruby

    《From Java to Ruby》这本书是Java开发者转向Ruby语言的一份宝贵资源。它引导读者了解从传统的Java编程环境过渡到Ruby的动态世界时所遇到的概念差异和技术挑战。Ruby是一种灵活、简洁且富有表现力的编程语言,它...

    从 Java 到 Ruby_ 每一个管理者应该知道的事情

    标题 "从 Java 到 Ruby_ 每一个管理者应该知道的事情" 提示我们,这篇文章或书籍将探讨在 IT 管理领域从使用 Java 转向 Ruby 的关键点。Ruby 是一种动态类型、面向对象的编程语言,以其简洁、灵活的语法和强大的元...

    From java to Ruby

    - **语法差异**:Java 是一种静态类型语言,而 Ruby 是动态类型的。这导致了它们在编写代码时有着不同的语法结构和风格。 - **面向对象特性**:虽然两者都是面向对象的语言,但 Ruby 更加强调简洁性和灵活性,使得...

    Java与Ruby在Web开发上谁更高效

    【Java与Ruby在Web开发上...虽然Ruby on Rails以快速开发和简洁语法著称,但对于追求更强大、更灵活的开发流程的Java开发者来说,Java提供了一条不同的高效开发路径。选择哪种语言取决于项目需求、团队技能和开发偏好。

    from java to ruby -things every manager should know

    ### 从 Java 到 Ruby:每位管理者应知之事 #### 引言 随着技术的不断发展,编程语言也在不断地演进。对于很多企业来说,选择合适的技术栈是至关重要的一步。《从 Java 到 Ruby:每位管理者应知之事》这本书正是为了...

    Ruby-JRuby一个Ruby语言的Java实现

    Ruby是一种动态、面向对象的脚本编程语言,以其简洁、优雅的语法和强大的元编程能力而受到程序员的喜爱。然而,由于其原生解释器是用C语言编写的,它在某些场景下可能无法充分利用现代多核处理器的性能,或者无法很...

    巧妙规避Java与Ruby语言迁移过程中的风险

    在IT行业中,语言迁移是一个常见的现象,特别是在软件开发领域,开发者可能会从一种编程语言迁移到另一种,例如从Java转向Ruby。然而,这种迁移过程往往伴随着风险。本文主要探讨了Java和Ruby这两种语言在迁移过程中...

    Ruby-pygmentsrbPythonpygments语法高亮显示的一个Ruby包装器

    - **多种语言支持**:`Pygments` 支持包括 Java、Python、Ruby、JavaScript 在内的众多编程语言,以及 Markdown、LaTeX 和其他文本格式。 - **丰富的样式**:`Pygments` 提供多种预定义的样式表,可以改变颜色方案和...

    ruby2java:查尔斯·纳特(Charles Nutter)的JRuby项目的分支,该项目从Ruby源代码构建Java .class文件-java project source code

    这涉及到对Ruby语法的深入理解和对Java字节码的生成规则的精通。 2. **Ruby元编程支持**:Ruby的元编程能力是其魅力之一,Ruby2Java需要处理这些动态特性,确保它们在Java环境中仍能正常工作。 3. **JVM接口**:...

    基于Ruby+Java搜索引擎原理与实现

    《基于Ruby+Java搜索引擎原理与实现》是一部深入探讨搜索引擎技术的书籍,虽然只涵盖了前三个章节,但已足以让我们对搜索引擎的基本运作有初步的理解。在本文中,我们将围绕Ruby和Java这两种编程语言如何应用于搜索...

    对Ruby VS Java误区的深度剖析

    Java以其稳定性和丰富的库适合大型企业级应用,而Ruby则以其高效开发速度和简洁语法吸引着初创公司和快速迭代的项目。重要的是理解每种语言的核心优势,而非陷入单一的语言崇拜,根据实际需求做出明智的决策。

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

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

    android ruby解释器

    在Android环境中运行Ruby,可以为开发者提供一个新的开发选项,特别是对于那些熟悉Ruby但不熟悉Java或者Kotlin的开发者来说。 Android Ruby解释器的实现通常是基于JRuby,这是一个用Java编写的Ruby解释器,能够与...

    Ruby Programming

    《Programming Ruby》被誉为是最好的Ruby编程书籍之一,它不仅详尽地介绍了Ruby语言的基础知识,还深入探讨了Ruby的核心概念和技术细节。这本书由David Thomas、Andy Hunt、Thomas A.EW Matthews和David Heinemeier ...

    JRuby和Rails-让Ruby语言融入于Java项目.rar

    JRuby的优势在于它不仅支持Ruby语法,还能利用Java的生态系统,包括Java库、Java虚拟机(JVM)以及各种企业级服务。这使得开发者能够在Java项目中利用Ruby的简洁性和高效性,同时享受Java平台的稳定性和可扩展性。 ...

    ruby初学者教程(对初学者很有帮助)

    - **语法风格**:Ruby的语法更加灵活,允许更多的表达方式;而Python则强调代码的一致性和可读性。 - **社区文化**:Ruby社区更倾向于快速开发和敏捷实践;而Python社区则更加注重稳定性和代码质量。 - **应用场景**...

Global site tag (gtag.js) - Google Analytics