Page 3 概述
¨ 解釋執行:Python,Ruby,互動性很好; ¨ 編譯執行:Pascal, C,速度較快。 n 本地執行,如C,C++; n 虛擬機器執行,如Java, C#。 ¨ 動態語言,如JavaScript,Ruby; ¨ 靜態語言,如C++,Java。 |
松本行弘(Matz) 1993
Ruby [`ru:bi](紅寶石)
Ruby 吸取了 perl 的Regex, 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 |
每個參數後自動換行 |
print |
不自動換行,換行用”\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 |
Regex |
|
|
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? |
比較兩個對象在記憶體中地址是否相同 |
< |
小於 |
> |
大於 |
<= |
小於等於 |
>= |
大於等於 |
=~ |
匹配Regex |
!~ |
斷言不匹配Regex |
=== |
右邊的對象在左邊區間內 puts(0..9)===3.14 #true puts('a'..'f')==='c' # true |
<=> |
比較兩個對象大小,大於1,等於0,小於-1. |
Ruby裡,nil和false為假,其它都為真。
11. 判斷語句
- 單行if語句
|
if then end |
( ) if |
- 多行if語句
|
if elsif else end |
- unless條件陳述式
|
unless |
if not |
- case分支條件陳述式
|
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. 線程