产品狗学编程是一件多么快乐的事情,汪汪汪!
##3.1 注释与分行
注释
# 用于单行注释
=begin & =end 用于多行注释
分行
; 分号代表一个语句的结束,一行中写了多个语句可以用分号来分行,最后一个语句可以省略分号
\ 用于将一行写不完的语句连接下一行(这里跟shell一样),也就是说通过\连接的上下行当做一行看
##3.2 分隔符
常用分隔符主要有:
| 符号 | 名称 | 用途 |
|---|---|---|
| ; | 分号 | 用来分隔一行中的多个语句 |
| () | 圆括号 | 提高优先级;定义方法时容纳参数列表 |
|空格 |分隔字符;在可省略()的地方代替()
, |逗号 |隔开多个参数 . |点 |将对象与它的方法隔开 :: |紧连俩冒号|域作用符,将模块(类)与它的常量隔开
##3.3 keyword
define module: module
define class: class
define method: def,undef
check type: defined?
条件语句: if,then,else,elsif,case,when,unless
循环语句: for,in,while,until,next,break,do,redo,retry,yield
逻辑判断: not,and,or
逻辑值和空值: true,false,nil——布尔?
异常处理: rescue,ensure
对象引用: super,self
块的起始: begin/end
嵌入模块: BEGIN,END
文件相关: _FILE_,_LINE_
方法返回: return
别名: alias
BEGIN模块相当于C语言中的宏(不懂),END模块用来作一些收尾工作(不懂)。有了require,include,应该取消BEGIN和END的语法定义。——都不懂就是了。
##3.4 运算符
| 优先级 | 能否重写 | 运算符 | 描述 |
|---|---|---|---|
| 最高 | Y | [] []= | 数组下标 数组元素赋值 |
|Y |** |承冥
|Y |! ~ + - |非 位非 一元加 负号
|Y |* / % |乘 除 模
|Y |+ - |加 减
|Y |>> << |左移 右移
|Y |& |位与
|Y |^ ¦ |位异或 位或
|Y |<= < > >= |不大于 小于 大于 不小于
|Y |<=> == === =~ != !~|各种相等判断(!= !~不能重写)
| |&& |短路与
| |¦¦ |短路或
| |.. ... |区间的开始点到结束点
| |?: |三元条件运算符
| |= %= ~= /= -= += &= >>= <<= *= &&= **= ¦= |各种赋值,例如b+=3意思是b=b+3
| |defined? |检查类型
| |not |逻辑非
| |or and |逻辑或、逻辑与
| |if unless while until |判断与循环
最低 | |begin/end |定义方法、类、模块的范围
##3.5 标识名和变量的作用域
- 标识名用来指向常量、变量、方法、类和模块;
- 标识名的首字符用来帮助我们确定标识所指向内容的作用域;
- 一些标识符(上面那些关键字)不能用来当做常量、变量、方法、类或模块的名字;
- Ruby标识名区分大小写;
- 一个约定用于区别一个名字的用法:名字前面的第一个字符表明这个名字的用法。
局部变量、方法参数和方法名称应该用一个小写字母开头或者一个下划线开头;全局变量用美元符号$作为前缀(跟shell一样);而实例变量用@开头;类变量用@@开头;类名、模块名和常量应该用大写字母开头。 - 词首字母后面可以是字母、数字和下划线的任意组合;@后面不可以直接跟数字。
##3.6 类库
- 关键字可以直接使用;
- 还有其他常用的应用程序,把它们放在一个专门的根目录下,成为类库(类的仓库)。当前程序试用到类库中某个程序已经定义好的类和方法时,应该是用
require或include将类库程序名包含在当前程序中; - 从父类继承得到的方法可以直接使用。
##3.7 数据类型
Ruby数据类型有数字、字符串、数组、哈希表、区间、正则表达式。
- 数字分为整型、浮点型。浮点型数据小数点后必须跟数字(1.e3不可以,1.1e3可以)。数字可以有前缀:0表示八进制,0x表示十六进制,0b表示二进制(0724,0x5AC4,0b11101)。
- 字符串是在''、""之间的代码。
- 数组的下标从0开始。Ruby的数组的每个元素可以是不同的类型:[2.4,99,"thank you",[a,b,c],78]。
- 区间:1..5表示1,2,3,4,5;1...5表示1,2,3,4。——容易记反。
##3.8 赋值和条件运算符 Ruby的基本赋值用"="来完成。
| 条件运算符 | 用于/举例 |
|---|---|
| ==(等于) !=(不等于) |
比较两个对象的值是否相等,返回true、false a=1; b=1.0; a==b #true |
| eql? | 比较两个对象的值、类型是否相等,返回true、false a=1; b=1.0; a.eql?(b) #false (a为整型,b为浮点型) |
| equal? | 比较两个对象在内存中地址是否相同,返回true、false a=1.0; b=1.0; a.equal?(b) #false a=1.0; b=a; a.equal?(b) #true |
| <=> | 比较两个对象的大小,大于、等于、小于分别返回1,0,-1 "aab"<=>"acb" #-1 (第二个a的ASCII码小于c) [5]<=>[4,9] #1 (第一个元素5>4) |
##3.9 条件判断语句 判断条件是否相等用"==",而不是"="(这是赋值?)
###一、单行if(如果)语句
if 条件 then 语句1;语句2;语句... end(语句1;语句2;语句...) if 条件
###二、多行if语句
if 条件
语句1;语句2;语句...
elsif 条件
语句1;语句2;语句...
else
语句1;语句2;语句...
end
###三、unless(除非)条件语句
unless 条件 = if not(条件)
###四、case分支条件语句
case 对象
when 可能性1
语句1;语句2;语句...
when 可能性2
语句1;语句2;语句...
when 可能性...
语句1;语句2;语句...
else
语句1;语句2;语句...
end
##3.10 循环语句
###一、While(当...)循环
while 条件
语句1;语句2;语句...
end
###二、单行while循环
(语句1;语句2;语句...) while 条件
###三、until(直到...)循环
until 条件 = while not(条件)
见例E3.10-1.rb