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

programming ruby 2nd学习笔记

阅读更多

本文是我学习programming ruby 2nd的笔记,由于我熟悉的语言是javapython,所以会在其中夹杂一些rubyjavapython的比较,文中的其他语言一律指javapython。格式按原文的顺序,我只是按我阅读的顺序来更新本文,若没时间,更新会很慢。

好像我的电子文档有问题,不少目录结构不正确。

第一版序言

 

Ruby创始人的序言

第二版序言

 

还是Ruby创始人的序言

前言

 

一些废话,不过看了可以增加一下见识J

路标

 

这本书主要分成四部分:

l         Ruby的方方面面:语法级别的详细说明

l         Ruby设置:对于ruby SDK命令行,以及配套工具使用说明

l         Ruby详细:对ruby语言的关键点详细说明

l         Ruby参考手册:比较完整的参考手册,差不多占了本书的一半篇幅

 

作者建议了各种不同类型的读者的阅读方式:

l         如果你是个初学者:你最好从第一部分的教材开始,把库参考放在手边,你就可以写程序了。

l         如果你已经精通PerlPythonJava或者Smalltalk,你可以从第1章开始,熟悉了ruby安装与运行后,然后阅读第2章关于ruby基本特性的介绍,接着你可以采取较慢的方法(按顺序阅读),或者略过这些详细说明,直接跳到第三部分的高级部分,最后参看第四部分的库参考。

l         专家、大师、和那些“我讨厌冗长的教材”的人可以直接跳到到第22章的语言参考,然后翻一下第四部分得库参考,然后把这本书作为一个咖啡杯垫。

ruby的方方面面

 

开始

 

安装ruby

运行ruby

Ruby文档:RDocri

ruby新手上路

ruby是一门面向对象语言

每种语言都宣称自己是OO语言,只是不同的支持方式,java说自己比C++来的更OO,更简单;python说自己比java对象,就连方法都是对象。但关键一点是,编译型的语言不能直接拿来跟python等动态语言相比,很多特征没有可比性,尤其是对OO特征的比较。总之,不能为了那个,而让编码很难受,可以参看原文作者的辩解J

ruby的一些基本知识

1.        不需要在行尾加上分号,一行一个语句

 

2.        Ruby注释开始于#号,结束在行尾,缩排没有特殊意义,就是每行的开头不缩行,不过为了可读性,不建议这样做

 

3.        方法是由关键字def来定义的,紧跟着方法的名字。Ruby不使用大括号来划定复合语句和定义的界限,而是简单地用关键词end来结束它们

 

4.         函数调用可以不用括号,但是,优先规则会使哪个参数被哪个方法使用变得复杂,所以我们建议除了极简单的情况,还是使用圆括号为好

5.         单引号与双引号之间的不同是Ruby在转换字面值到字符串对象时所处理的数量,单引号的情况下会少。除了一些例外,字符串字面值就是字符串的值。

6.         双引号的情况下,Ruby要做更多的处理,首先,把反斜杠开头的字符替换成二进制值。最常见的是"\n"(被替换成换行符);第二点,Ruby要修改双引号括住的字符串,字符串中的#{表达式}序列要用表达式的值来替换(如果表达式是一个简单的全局变量、实例或者类变量,那么就不必写出大括号)

7.         Ruby方法的返回值默认是最后被求的表达式的值(不过,我觉得这没什么好处)

8.         命名约定:

l         名字前面的第一个字符表明这个名字的用法,局部变量、方法参数和方法名称应该用一个小写字母开头或者一个下划线;

l         全局变量用美元符作为前缀($),而实例变量用@开头,类变量用两个@开头;

l         最后,类名、模块名和常量应该大写字母开头。

l         词首字母后面可以是字母、数字和下划线的任意组合(规则规定,@后面不可以直接跟数字)

数组与hash

1.        Ruby的数组和哈希是有序集合(注意在java中,hash有无序的实现类,也有有序的;pythonruby一样)

 

2.        创建空数组两个方法: empty1 = []; empty2 = Array.new

 

3.        对于创建字符串的数组,可以使用快捷方式%w: a = %w{ ant bee cat dog elk },输出结果: ["ant", "bee", "cat", "dog", "elk"]

 

4.        hash的创建与python一样,使用大括号”{}”,可能都是动态语言的缘故吧

 

5.        如果使用一个不存在的键来索引哈希,默认返回nil。正常情况下这是很方便的,因为nil用在条件表达式中就是false

 

6.        创建一个新的空的哈希时改变默认值是很容易的,比如:histogram = Hash.new(0)

 

 

总之,ruby中这两个对象的使用方式与python差不多一样

 

控制结构

1.        Ruby包括所有常见的控制结构,这些结构的主体周围缺少了大括号,在Ruby中使用end关键字表示一段主体的结束

 

2.         如果if语句或者while语句的主体是一个简单的表达式,可以使用Ruby语句修饰符来代替。简单地写下这个表达式,后面跟上if或者while和条件语句。例如:

l         通用形式:

if radiation>3000
   puts "Danger,Will Robinson"
end

l                修饰符形式:

 

puts "Danger,Will Robinson" if radiation>3000

 

正则表达式

与其他语言没什么区别,可以参看Mastering Regular Expressions》,国内已经影印出版了

代码块与迭代器

1.        代码块:可以和方法调用关联的一系列代码,就好像这些代码是方法的参数一样,把代码块和方法当成是协同工作的关系,在它们之间控制在来回交换。

 

2.        Rubyyield语句能够调用代码块一次或者更多次。

 

3.         贯穿整个Ruby库,到处都是使用代码块来实现迭代器。迭代器是一种用来连续返回某种集合所有元素的方法,比如一个数组。

读取与’Riting

1.        Ruby带着很完善的I/O

 

2.         puts把它的所有参数写出来,每一个都加入一个新行;print也写出它的参数,不过没有新行。它们两个都能向任意的I/O对象写入,不过默认是写入控制台;printf按格式输出参数(就像C或者Perlprintf)。

3.         有很多种方式来把输入读取到你的程序中,最传统的就是使用gets例程,它从你的程序的标准输入流中返回下一行。

4.        可以参看原文中的关于$_ARGF的讨论,很有收获

 

继续前进

本章是一个对ruby语言的基本特性的快速浏览

类,对象,变量

1.        Ruby中使用class来定义类,构造方法是initialize,可以带参数。Java中是与类同名的方法,python中是__init__方法。

 

2.        使用类的new默认方法来构造对象,可以传递参数。比如:

 

aSong = Song.new("Bicylops", "Fleck", 260) 

 

继承与消息

Ruby使用”<”来表示继承关系,java使用extends, python使用()

 

对象与属性

1.        这两个概念与一般OO语言没什么本质的区别

 

2.        ruby是单继承语言,但是ruby提供了一种达到多继承效果的功能:混合(Mixins),而没有多继承的缺点

 

3.        Ruby提供了简便方式来创建属性读取与写入方法:attr_readerattr_writer

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics