`
JackyCheng2007
  • 浏览: 253810 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby 入门学习笔记

    博客分类:
  • RoR
阅读更多
引用
Ruby is designed to make programmers happy.

Ruby的设计理念就是让开发者用的舒心。先看看Ruby有什么特别之处,感如此自信。
在学习概念之前,得先准备一个环境,好是我能亲身体验。安装环境似乎不是那么容易,简单起见不如用ruby提供的在线解释器:http://tryruby.org/

Ruby Is Object-Oriented - 面向对象
Java说自己是Everything is Object,万事皆对象。Ruby说Everyvalue is Object,每个值都是对象,哪怕是一个数字1,一个布尔变量true,甚至一个空值nil,都是对象。似乎更进一步。
>> 2.class                                                              
=> Fixnum                                                               
>> 0.0.class                                                            
=> Float                                                                
>> true.class                                                           
=> TrueClass                                                            
>> false.class                                                          
=> FalseClass                                                           
>> nil.class                                                            
=> NilClass  

上面都是对一些值调用了class方法的执行结果。方法?怎么没有括号?对,省略了,对ruby而言,括号是可选的,尤其是对于无参方法的调用。这真不错,少打两个字符,特别是括号比一般的字符还难打,省力,给力。不过,这里有个问题,不带括号,你怎么知道不是访问的属性?这也是ruby有意而为之的。OO里面不是有封装原则吗?建议不要直接访问对象的属性,而是通过方法来访问,就像POJO。ruby干脆就把这个原则加入到语言级别的限制,而不是设计原则的指导。够霸道!有个性!

Blocks and Iterators - 块与迭代
下面是一个块的例子:
{ puts "Hello" } # this is a block
do ###
  club.enroll(person) # and so is this
  person.socialize #
end ###

迭代的威力(你会发现很多循环都被迭代实现了,也就是ruby很少用for或while):
>> 3.times { print "Ruby! }
Ruby! Ruby! Ruby! => 3                                                  
>> 1.upto(9) {|x| print x }                                              
123456789=> 1   


看看上面的代码,这个代码块和循环的实现真实令人耳目一新。
先看迭代,真够简洁,而且接近英语表达。这和我们常用的for和while比起来,简洁多了。其实你想一下,除了循环若干次这种迭代以外,我们还常用哪些迭代?数组!对,数组和Hash就和数字一样也有一些迭代方法,让我们可以循环操作它里面的每个元素。从OO的角度,ruby把迭代这个功能划归给数字,Hash和数组,似乎更为直接。迭代是不是数字,Hash和数组的职责所在呢?在ruby的概念里,是的。
再看这里的代码块。代码块直接跟在对象的方法后面,从而和方法的调用关联起来。这是ruby的一项很强大的基本功能。这种用法常常和循环结合使用,从而达到简洁的表达迭代。
更令人吃惊的是代码块可以作为参数传递(用&表示要传递代码块):
def wrap &b
  print "Santa says: "
  3.times(&b)
  print "\n"
end
wrap { print "Ho! " }

Expressions and Operators - 表达式和操作符
引用
Ruby’s syntax is expression-oriented.

面向表达式的语法。if在java里面是一个语句,但在ruby里面却是一个表达式,表达式是有值的哦:
minimum = if x < y then x else y end

在ruby里面所有的语句都是表达式,但有些没有有意义的返回值,而是返回nil,也就是空。
>> 2 ** 1024                                                            
=> 179769313486231590772930519078902473361797697894230657273430081157732
675805500963132708477322407536021120113879871393357658789768814416622492
847430639474124377767893424865485276302219601246094119453082952085005768
838150682342462881473913110540827237163350510684586298239947245938479716
304835356329624224137216

ruby里面的运算和java没有太大的区别,但是ruby的整数是没有大小限制的,这样你就可以再ruby里面表达大数了哦。

Methods
方法用def定义,可以用return 返回值,也可以不用return。没有return的时候,最后一个表达式的值就是返回值。
def square(x)  
  x*x  
end

上面的方法,并没有指明属于哪个类。这叫什么OO啊?其实这样的方法是Object类的私有方法。如果要为一个类定义方法,如下:
def Math.square(x)  
  x*x # here is comment.
end

这里,Math不仅是一个类,还是ruby内置的类。这又是ruby的一大特色:类和模块是开放的,可以再运行时被修改和扩展。

Indentation & Comment
1. 换行,你不必用分号结束一句话。一条语句占一行
2. 缩进,习惯上ruby喜欢缩进两个字符
3. 块,  用end表示一个代码块的结束。不管是类还是方法,你不需要{}来表示开始和结束
4. 注释,用#表示注释,一直到行末

Data Types
1. 字符串String
   这个当然是最基本的类型了。你可以用单引号或者双引号来括起一串字符从而得到一个字符串。但是单引号括起来的字符串ruby基本不做什么处理,而双引号括起来的字符串ruby可以对他做很多事情,比如转移,格式化,正则表达式计算等。
def say_goodnight(name)
"Good night, #{name.capitalize}"
end
puts say_goodnight('pa' )


2. Arrays and Hashes
   数组和哈希结构都是带索引的集合,可以存贮任意对象。数组的索引是整数,而哈希的索引可以是任意对象。他们都可以根据需要自动扩展大小。数组的效率更高,而哈希则更为灵活。有趣的是一个数组或哈希集合里面可以存储不同类型的对象。
数组的创建和访问如下:
a = [ 1, 'cat' , 3.14 ] # array with three elements
a[0] # access the first element (1)
a[2] = nil # set the third element
# array now [ 1, 'cat', nil ]

哈希的例子:
inst_section = {
:cello => 'string' ,
:clarinet => 'woodwind' ,
:drum => 'percussion' ,
:oboe => 'woodwind' ,
:trumpet => 'brass' ,
:violin => 'string'
}

inst_section[:oboe] #=> 'woodwind'
inst_section[:cello] #=> 'string'
inst_section[:bassoon] #=> nil


3. Regular Expressions
你可以通过下面的两种方式定义一个正则表达式:
/pattern/ or %r{pattern}

你可以通过=~来测试是否匹配:
if line =~ /P(erl|ython)/
  puts "There seems to be another scripting language here"
end


Assignment
除了一般的赋值语法外,ruby还支持很有意思的并行赋值:
x, y = 1, 2 # Same as x = 1; y = 2
a, b = b, a # Swap the value of two variables
x,y,z = [1,2,3] # Array elements automatically assigned to variables


ruby支持多值返回,这得得益于这种并行赋值的强大:
# Define a method to convert Cartesian (x,y) coordinates to Polar
def polar(x,y)
theta = Math.atan2(y,x) # Compute the angle
r = Math.hypot(x,y) # Compute the distance
[r, theta] # The last expression is the return value
end

# Here's how we use this method with parallel assignment
distance, angle = polar(2,2)


Punctuation Suffixes and Prefixes - 前缀与后缀
ruby的方法名似乎没有什么限制,甚至可以有感情色彩,使得编程语言没有那么古板,没有人情味。比如你可以用问好?最为方法名的末尾,这表示返回布尔值,也就是一个谓词判断。比如数组有个方法叫“empty?”。你也可以在名字后面加上谈好!,表示用这个方法的时候要注意。很多ruby的核心类都定义了一套带!和不太!的同名方法,不带!的方法呢不会改变对象的值,带!的则会。
除了后缀,还有前缀。比如$符号开头的代表是全局变量。@开头的是对象实例的变量。@@开头的是类的变量。也就是表达了三个不同的变量作用域scope。

Ruby Names
ruby的命名规则很特别:
1. 本地的变量,方法参数和方法名称都得用小写字母或者下划线开头。对象实例内的变量用@开头。如果名字含有多个单词,就用下划线隔开。order, line_item, xr2000。
2. 类名,模块名和常量,必须用大写字母开头。如果含有多个词,用驼峰结构。Object,
PurchaseOrder, LineItem。

Regexp and Range - 正则表达式和范围
ruby提供了正则表达式对象和从一点到另一点的范围对象。
/[Rr]uby/ # Matches "Ruby" or "ruby"
/\d{5}/ # Matches 5 consecutive digits
1..3 # All x where 1 <= x <= 3
1...3 # All x where 1 <= x < 3


Classes and Modules - 对象和模块
引用
A class is a collection of related methods that operate on the state of an object.

类就是一些方法的集合,这些方法都是用来访问和操作对象状态的。所谓对象的状态,就是指对象的实例变量的值,也就是@开头的那些变量的值。

Ruby Surprises
Ruby的字符串是可变的。你知道java的字符串是不可变哦。
在使用条件表达式估值的地方,比如if,for和while,表达式的值不一定是true或者false哦。nil被看做false,其他的值都被看成是true哦。




6
3
分享到:
评论
1 楼 Hooopo 2011-03-28  
 

相关推荐

    ruby学习笔记

    ruby基础笔记,自学笔记,ruby基础语法非常全面ruby基础笔记,自学笔记,ruby基础语法非常全面

    RubyStudy-master-ruby学习笔记

    这些资源可以帮助你快速掌握 Ruby 的基础知识。然后,实践是学习 Ruby 的关键。安装 Ruby 环境,编写简单的程序,例如计算器、游戏等。实践可以帮助你更好地理解 Ruby 的语法和概念。此外,加入 Ruby 社区也是学习 ...

    Ruby元编程基础学习笔记整理

    ### Ruby元编程基础学习笔记整理 #### 一、语言构建(Language Constructs) 在Ruby中,诸如变量、类和方法等元素统称为语言构建(Language Constructs)。这些构建块是构成Ruby程序的基础。 ##### 示例代码分析 ```...

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、...以上总结了Ruby的一些基础知识点,这些内容对于初学者掌握Ruby编程语言至关重要,同时也是进一步深入学习的基石。

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    ruby笔记1ruby笔记1ruby笔记1

    标题中的"ruby笔记1ruby笔记1ruby笔记1"暗示了这是一份关于Ruby编程语言的学习笔记,可能包含了作者在学习过程中的重点、难点以及心得体验。描述中的内容重复了标题,进一步强调了这是关于Ruby的深入学习记录。标签...

    rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z

    这可能涵盖Ruby的基础知识,如变量、控制结构、类和对象、模块、方法、异常处理、文件I/O以及Ruby on Rails框架的入门等内容。Ruby语言支持面向对象编程,其核心理念是“一切皆对象”,这使得编程更加灵活且易于理解...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    ruby on rails 笔记(陈刚)

    从给定的文件信息来看,这份文档是陈刚关于Ruby on Rails的学习笔记,旨在帮助初学者更好地理解并掌握Ruby on Rails这一流行的Web开发框架。以下是对文档中提及的关键知识点的详细解析: ### 安装与配置 #### Ruby...

    Ruby知识点笔记

    Ruby是一种面向对象的脚本语言,其语法简洁且灵活。在Ruby中,标识名的命名规则至关重要,因为它们区分了不同类型的变量和方法。...学习并熟练掌握这些基础概念,将有助于深入理解和运用Ruby语言。

    学习 Ruby 的笔记以及 Demo.zip

    本资源“学习 Ruby 的笔记以及 Demo.zip”显然包含了关于Ruby编程的学习资料和一些实际示例代码,旨在帮助初学者理解并掌握Ruby的基础及进阶特性。 首先,让我们深入了解一下Ruby的核心特性: 1. 面向对象:Ruby是...

    Ruby自学笔记

    以上是Ruby自学笔记中提及的关键知识点的详细解读,如果要学好Ruby语言,深入理解这些基础知识是非常必要的。Ruby语言的这些特性与规则构成了其独特的编程范式,使得它在动态语言领域中占有一席之地。

    ruby语言入门教程-自学笔记

    ### Ruby语言入门教程知识点详解 #### 一、Ruby语言简介 **Ruby** 是一种功能强大的、面向对象的、解释型的编程语言,由日本计算机科学家松本行弘(Yukihiro Matsumoto)于1995年开发。Ruby语言的设计哲学强调...

    ruby笔记2ruby笔记2ruby笔记2

    "ruby笔记2ruby笔记2ruby笔记2"可能是指一系列关于Ruby学习的笔记,这些笔记可能涵盖了Ruby的基础概念、核心特性以及进阶话题。在Ruby的学习过程中,理解和掌握以下几个关键知识点至关重要: 1. **面向对象编程...

    Ruby_on_Rails笔记

    在《Ruby on Rails笔记》中,作者陈刚分享了他在学习Ruby on Rails过程中的经验与心得。这份笔记不仅包含了作者的学习历程和个人体会,还汇集了他在学习过程中遇到的问题及其解决方案。作者提到,“读不如做,做不如...

    Ruby学习笔记一

    笔记: Ruby会默认返回方法中的最后一个值。 如果需要返回多个值,可以用数组来实现。...强烈推荐新手入门在线学习网站: http://tryruby.org/ ,简直爽到爆! 各种代码 eg1: 建立一个哈希表 ojs = {}

    Ruby_On_Rails笔记

    综上所述,Ruby on Rails的笔记内容涵盖了从安装Rails环境到创建和运行一个简单的Rails项目的基础知识,这些内容对于初学者来说是学习Rails框架的极好入门材料。通过对这些知识点的学习,初学者可以快速了解Rails的...

    Extjs 5 学习笔记

    ### Extjs 5 学习笔记之 SenchaCmd 深入解析 #### 一、SenchaCmd 的简介 SenchaCmd 是一个跨平台的命令行工具,它为基于 ExtJS 和 Sencha Touch 应用程序的开发周期提供了全面的支持。从创建应用程序的基础结构到...

Global site tag (gtag.js) - Google Analytics