1、關鍵字
關鍵字不能用於定義變數或者常量,module,class,def , undef,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
2、注釋
單行注釋以#開頭,如:#這是備註陳述式
多行注釋以=begin開頭,以=end結束,如:
複製代碼 代碼如下:
=begin
block_test = lambda {puts 'This is from lambda!'}
def block_foo(bt)
puts 'Before yield!'
bt.call
puts 'After yield!'
end
block_foo(block_test)
=end
3、資料類型
Ruby中以下種資料類型 :Numeric(包括Fixnum和Float)、String、Boolean、Array、Regexp、Range、Hash,還有一種特殊類型:Symbol
4、賦值和條件運算
Ruby中的賦值使用“=”,可以進行批量賦值,如a,b,c=1,2,3
Ruby中的條件運算,如下列表:
| 運算子 |
說明 |
| ==和!= |
比較兩個對象的值是否相等,a=1,b=1.0,a==b(true) |
| eql? |
比較兩個對象的值是否相等和資料類型是否一致,a=1,b=1.0,a.eql?b(false,a為Fixnum類型,b為Float類型) |
| eqlal? |
比較兩個對象在記憶體中的地址是否一致,a=1,b=1,a.eqlal?b(false,在記憶體中是2個對象,地址不一樣),a=1,b=a,a.eqlal?b(true) |
| <=> |
比較兩個對象的值的大小,對應返回1(大於),0(等於),-1(小於) |
| >,>=,<=,< |
比較兩個對象的值的大小,返回true和false |
| === |
區間內含項目關聯性運算子,右邊對象是否在左邊區間的範圍之內 |
| =~和!~ |
Regex匹配運算子,表示匹配和不匹配Regex |
5、輸出和輸入
Ruby 語言 中內建的IO輸入輸出方法寫在Kernel 模組的內,並且Mix-in 在根類Object中,在任意類中使用輸入輸出方法,可以直接進行調用,
輸出方法程式碼範例:
複製代碼 代碼如下:
print 'Hello!' #輸出:Hello!
print "Hello!\n" #輸出:Hello!
printf 'Number: %.2f, String: %s',14.547,'hi!' #輸出:Number: 14.55, String: hi!
print "\n"
puts 'Hello!' 'hi' #輸出:Hello!hi
puts 'Hello!','hi' #輸出:Hello![換行]hi
print可以加參數可以輸出到檔案,預設輸出到控制台,printf是按格式輸出,如上代碼中,%.2f的意思是第一個參數按Float類型輸出,保留2位小數,%s是第二個值按String類型輸出,print "Hello!\n"和print 'Hello\n'的區別在於,""號對輸出內容進行解析,\n起換行作用,''號原樣輸出內容,\n被原樣輸出,沒起換行作用,puts方法的參數是可變參數,可以有零個或者多個參數,參數間空格則輸出不換行,參數間用“,”分割,則每輸出一個參數都換行;
輸入方法,gets用於接收使用者輸入的字串,在字串的末尾會自動加上一個分行符號,所以一般在使用gets方法擷取輸入資料時,會同時使用chomp方法去掉末尾的分行符號
複製代碼 代碼如下:
STDOUT.flush
in_data = gets.chomp
6、條件判斷
條件判斷可以使用if else,unless,case進行,不同的情況使用不同的關鍵字,可以讓代碼更簡潔易懂,如下範例程式碼:
複製代碼 代碼如下:
r=rand*100
rf=format('%.2f',r)
#普通寫法
if r>50 then puts "得分:#{rf}" end
#更好的寫法
puts "得分:#{rf}" if r>50
#判斷if not的時候,請使用unless,下一句代碼和上一句代碼等價
puts "得分:#{rf}" unless r<=50
#多條件判斷
if r<50
puts "得分:#{rf} 成績:不合格"
else
puts "得分:#{rf} 成績:良好"
end
#更多條件
if r>90
puts "得分:#{rf} 成績:優秀"
elsif r>70
puts "得分:#{rf} 成績:良好"
elsif r>50
puts "得分:#{rf} 成績:合格"
else
puts "得分:#{rf} 成績:不合格"
end
#更好的方式,採用case分支語句,when後邊的條件用了Range,Ruby自動使用===進行判斷
case r
when 90..100
puts "得分:#{rf} 成績:優秀"
when 70..90
puts "得分:#{rf} 成績:良好"
when 50..70
puts "得分:#{rf} 成績:合格"
else
puts "得分:#{rf} 成績:不合格"
end
7、迴圈
Ruby的迴圈功能相當強大,除了通用的while、until、for迴圈,還有each、times、upto、downto、step等,針對不同的迴圈對象使用不同的迴圈方式,異常方便,範例程式碼如下:
複製代碼 代碼如下:
i=0
#普通while迴圈
while i<10
i+=1
puts i
end
#單句代碼的while迴圈
puts i+=1 while i<10
#單句代碼的until迴圈,until==while not
puts i+=1 until i==10
j=10..20
#使用for進行對象的全迴圈,對象可以是數組、範圍、Map等集合形式,但是Ruby官方不推薦過多使用for迴圈,可以使用each進行替代,因為for迴圈沒有新開範圍,其中定義的變數在迴圈體外可以訪問,如下邊迴圈中的變數t,可以在for迴圈外訪問
for t in j
puts t
break if t==17 #當迴圈到t等於17時,跳出整個迴圈
end
#更好的方式:使用each進行遍曆
#單行代碼塊使用{}
j.each { |e| puts e }
#多行代碼塊使用do end
j.each do |e|
next if e==17 #e等於17時跳出本次迴圈,繼續e等於18的迴圈
puts e
end
#既定次數的迴圈,可以使用times
5.times{ |e| puts e } #e值從0開始
#具有順序的排列可以使用upto或者downto進行遍曆
'a'.upto('z') { |e| puts e unless ('h'..'n')===e} #遍曆a-z之間的英文字元,當e不在h-n之間的字母時,輸出
9.downto(1) do |e|
print "#{e}的平方值:#{e**2},#{e}的次方值:#{e**3}"
puts
end
#步長相同的遞增迴圈可以使用step
1.step(100,3){ |e| puts e}