page 3 概述
¨ 解释执行:python,ruby,交互性很好; ¨ 编译执行:pascal, c,速度较快。 n 本地执行,如c,c ; n 虚拟机执行,如java, c#。
¨ 动态语言,如javascript,ruby; ¨ 静态语言,如c ,java。 |
语言 ¨ 语法 关键字 ¨ 语义 ¨ 语用
|
松本行弘(matz) 1993
ruby [`ru:bi](红宝石)
ruby 吸取了 perl 的正则表达式, python 的简单性可读性,smalltalk 的纯面向对象语法和单继承,lisp 的无穷嵌套的语法,java的线程… |
page 14 上手
xp
cmd
c:\documents and settings\administrator>ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] |
第一种方式:ruby命令
c:\documents and settings\administrator>ruby -e 'print "hello world"' hello world |
ruby 运行ruby;
-e 执行后面的ruby脚本程序;
print 打印显示;
hello,world 要输出的内容。
第二种方式:irb交互执行
c:\documents and settings\administrator>irb irb(main):001:0> print "hello world" hello world=> nil irb(main):002:0> exit |
exit: 退出irb交互式环境
第三种方式:创建ruby脚本
c:\documents and settings\administrator>copy con helloworld.rb print "hello world" print "3*7=",3*7 ^z 已复制 1 个文件。
c:\documents and settings\administrator>helloworld.rb hello world3*7=21 |
page 17 ide
¨ eclipse rdt(ruby development tools)
¨ freeride scite
1.在scite编辑ruby代码;
2.保存为 .rb文件;
3.菜单栏,工具->运行或者f5;
page 18 语法
1. 注释
单行注释 # 多行注释 =begin =end
ruby的内嵌文档(rdoc)注释,用ri命令从源文件中产生文档。
rdoc内嵌在ruby代码之中的,可以转换为html文档。
ri命令,用来查看函数说明、类说明。函数说明、类说明应该放置在=begin和=end之中。注意:“=begin”一定要写在行首,也就是说,这一行前六个字符是“=begin”,之前不允许有空格。
2. 分行
用分号;表示语句结束。
一行多个语句,用分号隔开,最后一个语句,分号可以省略,换行符表示一行结束。
语句太长,可以在行末用符号 \ ,表示续行。
3. 分隔符
名称 |
符号 |
用途 |
分号 |
; |
用来分隔一行中的多个语句 |
圆括号 |
( ) |
提高优先级;定义方法时容纳参数列表 |
空格 |
|
分隔字符;在可省略()的地方,代替() |
逗号 |
, |
隔开多个参数 |
点 |
. |
将对象与它的方法隔开 |
紧连的两个冒号 |
:: |
域作用符,将模块(类)与它的常量隔开 |
4. 关键字
ruby中的关键字如下:
模块定义: |
module |
异常处理: |
rescue,ensure |
类定义: |
class |
对象引用: |
super,self |
方法定义: |
def,undef |
块的起始: |
begin/end |
检查类型: |
defined? |
嵌入模块: |
begin,end |
逻辑值和空值: |
true,false,nil |
文件相关: |
__file__,__line__ |
逻辑判断: |
not,and,or |
方法返回: |
return |
条件语句: |
if,then,else,elsif,case,when,unless |
别名: |
alias |
循环语句: |
for,in,while,until,next,break,do,redo,retry,yield |
begin模块相当于c语言中的宏,end模块用来作一些收尾工作。有了
require,include,应该取消begin和end的语法定义。
5. 运算符
6. 标识名:
常量,变量,方法,类和模块;
大小写敏感;
标识名第一个字符表明这个名字的用法。
局部变量、方法参数和方法名称 |
以小写字母开头或者下划线开头; |
类名、模块名和常量 |
用大写字母开头。 |
全局变量 |
以美元符为前缀$; |
实例变量 |
以@开头; |
类变量 |
用@@开头; |
词首字母后面可以是字母、数字和下划线的任意组合;
@后面不可以直接跟数字。
ruby程序代码用7位acsii码来表示,通过语言扩展来支持 euc,sjis或utf-8等8位编码系统。ruby2.0版本将支持16位的unicode编码。
7. 类库
可以直接使用:
i) 关键字;
ii) require或者include包含的类库中的类、方法;
iii)从父类中继承得到的方法。
puts |
每个参数后自动换行 |
|
不自动换行,换行用”\n” |
printf |
按格式输出,不自动换行 |
gets |
从键盘或文件中读入数据 |
c:\documents and settings\administrator>ruby -e 'puts "hello","world"' hello world |
c:\documents and settings\administrator>ruby -e 'printf "number:%f",3.2' number:3.200000 |
注意:printf的参数之间用逗号隔开。
c:\documents and settings\administrator>ruby -e ' printf "number:%4.3f,string %s ",1.5,"hello world"' number:1.500,string hello world |
8. 数据类型
类型 |
分类 |
说明及示例 |
数字 |
整数型 |
0 八进制, 0x 十六进制,0b 二进制 |
浮点型 | ||
字符串 |
单引号 ‘' |
|
双引号 “” |
| |
数组 |
从0开始,每个元素可以不同类型 |
例 [2.4,"thank you",[a,b,c],78] |
区间 |
1..5 |
1,2,3,4,5 |
1…5 |
1,2,3,4 | |
正则表达式 |
|
|
9. 赋值运算
交换变量a,b的值:
a,b=b,a;
注意括号:
a = (b = 1 2) 3 #a=6 ,b=3
逗号,从左往右运算,分别赋给a,b,c
x = 0 #x=0
a,b,c = x, (x 1), (x 2) #a=0 ,b=1,c=2
10. 条件运算
== |
等于 |
!= |
不等于 |
eql? |
比较两个对象的值、类型是否相等 |
equal? |
比较两个对象在内存中地址是否相同 |
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
=~ |
匹配正则表达式 |
!~ |
断言不匹配正则表达式 |
=== |
右边的对象在左边区间内 puts(0..9)===3.14 #true puts('a'..'f')==='c' # true |
<=> |
比较两个对象大小,大于1,等于0,小于-1. |
ruby里,nil和false为假,其它都为真。
11. 判断语句
|
if then end |
( ) if | |
|
if elsif else end |
|
unless
|
if not
| |
|
case when when else end |
12. 循环语句
单行while |
(语句1;语句2;语句…)while条件 |
多行while |
while 条件 语句,语句 end |
until直到 |
until 跳出循环条件 语句 until 条件=while not (条件) |
for…in循环 |
for 变量 in 对象 语句1; 语句2 ; 语句… end |
break,next&redo&retry
在循环体内,如果遇到:
break |
跳出当层循环; |
next |
忽略本次循环的剩余部分,开始下一次的循环; |
redo |
重新开始循环,还是从这一次开始; |
retry |
重头开始这个循环体。 |
times , upto , downto , each ,step
语句 |
运行结果 |
3.times { print "hi!" } |
#hi!hi!hi! |
1.upto(9) {|i| print i if i<7 } |
#123456 |
9.downto(1){|i| print i if i<7 } |
#654321 |
(1..9).each {|i| print i if i<7} |
#123456 |
0.step(11,3) {|i| print i } |
#0369 |
c:\documents and settings\administrator>irb irb(main):001:0> 1.upto(9){|i| print i if i<7} 123456=> 1 irb(main):002:0> 9.downto(1){|i|print i if i<7} 654321=> 9 irb(main):003:0> (1..9).each {|i| print i if i<7} 123456=> 1..9 irb(main):004:0> 0.step(11,3) {|i| print i} 0369=> 0 |
13. 异常
java
try…catch…finally…throw
ruby
begin/end…rescue…ensure…raise
retry可以用在rescue中。可以只用rescue或ensure,两者都使用时,rescue必须在ensure前。
14. 线程