最初に
Ruby本体とライブラリを手に入れるところから始めましょう
上がActiveRuby、下がMygameライブラリです
なお、このページのメソッドはMygameライブラリを使うことを前提としています
まずは
Rubyには色々なメソッド(Cで言う関数)が沢山ありますが、
説明しやすくするためのメソッドをまず紹介します
puts
変数の中身を表示するメソッドです
ただし、表示される場所はウィンドウ内ではなく、プロンプト(黒画面)部分です
C言語のprintf関数みたいなものと考えてください
gets
キーボードの入力を受け付けるメソッドです
これもC言語のscanf関数とほぼ同じ動作をします
p
変数の中身を表示するという意味ではputsと同じですが、
このメソッドは配列内の要素を表示するときに使います
条件分岐
if文等の条件分岐がC言語にありましたが、
Rubyでは少し異なった使い方(文)になります
単純分岐
if 条件式
条件成立時に行う処理
end
処理を大括弧で括らないところ以外は、使い方はCとほぼ変わりません
なお、Rubyでは
条件成立時に行う処理 if 条件式
と、if文を処理の後ろに書くことも出来ます
ただしこの場合、成立時の処理は前の1行にしか適用されないので注意です
(処理が複数の場合は、endで括ることをお勧めします)
さらに、
if 条件式
成立時に行う処理
else
不成立時に行う処理
end
この辺もCと使い方は同じです
多重分岐
1つの変数でいくつもの場合分けをする時、ifとelseだけだとソースが汚くなります
そこで次の文を使います
case 変数
when 条件
成立時の処理
(略)
end
C言語のswich文のようなものです
ただし、swich文は分岐毎にbreakが必要でしたが、
case文は最後にendを付けるだけでOKです
繰り返し
C言語にはforやwhileといった繰り返しの制御文がありましたが、
Rubyにも繰り返し文があります
単純な繰り返し
n.times do
繰り返す処理
end
nの部分に整数を入れると、n回do~endの間を繰り返します
条件付き繰り返し
while 条件式
繰り返す処理
end
条件が成立した場合のみ、endまでの処理が繰り返されます
ループの中断
Cでもあったbreak文が、Rubyでも使えます
while true
puts i
if i > 5
break
end
i += 1
end
無限ループ内でも、if文の条件が満たされればbreak文でループから脱出します
条件式で使うもの
if文やwhile文の条件式に使うものの紹介です
本来ならもっと最初に説明するはずなんだが・・・
比較演算子
詳しい説明は省きます
下の表を見て納得してください
| 比較演算子 |
意味 |
使用例 |
使用例の意味 |
| == |
等しい |
a==0 |
aは0と等しい |
| != |
等しくない |
a!=0 |
aは0と等しくない |
| > |
より大きい |
a>0 |
aは0より大きい |
| < |
より小さい |
a<0 |
aは0より小さい |
| >= |
以上 |
a>=0 |
aは0以上 |
| <= |
以下 |
a<=0 |
aは0以下 |
理論和・理論積
「~もしくは~」が理論和、「~かつ~」が理論積です
Cでは理論和は「||」、理論積は「&&」ですが、
Rubyでは理論和は「or」、理論積は「and」で、英語そのままです
これも下の表で省略
| A |
B |
条件 |
結果 |
| 真 |
真 |
or |
真 |
| 真 |
偽 |
or |
真 |
| 偽 |
真 |
or |
真 |
| 偽 |
偽 |
or |
偽 |
| 真 |
真 |
and |
真 |
| 真 |
偽 |
and |
偽 |
| 偽 |
真 |
and |
偽 |
| 偽 |
偽 |
and |
偽 |
乱数
Rubyもrandメソッド(関数)を使います
が、C言語のようにsrand(通称・種まき)は必要ありません
直でrandを使います
r = rand(6)
r = r + 1
p r #1~6の整数がランダムで表示
ちなみに、randの括弧は無くても問題ありませんが、
場合によっては予期しない結果が出ることもあります
例
rand(6) + 1 rand 6 + 1
↓ ↓
(0~5の乱数) + 1 rand(6 + 1)
↓ ↓
↓ rand(7)
↓ ↓
1~6の乱数 0~6の乱数
配列
内容はCと変わりません
Rubyの配列は他の変数と違い、配列であることを予め宣言しないといけません
ただし、一度宣言すれば、後は代入し放題です(勝手に拡張されていきます)
Rubyの配列ならではのメソッドもあります
スタック
push
pop
pushで配列の末尾に要素を追加し、popで末尾を取り出します
例
a = [] #配列を宣言
a.push 0 #0を追加
p a # => [0]
a.push 1 #1を追加
p a # => [0,1]
a.pop #1を削除
p a # => [0]
a.pop #0を削除
p a # => []
補足ですが、Rubyではコメントアウトは#を使います
キュー
unshift
shift
unshiftで配列の末尾に要素を追加し、shiftで先頭を取り出します
例
a = [] #配列を宣言
a.unshift 0 #0を追加
p a # => [0]
a.unshift 1 #1を追加
p a # => [0,1]
a.shift #0を削除
p a # => [1]
a.shift #1を削除
p a # => []
このスタックとキューはC言語でも使用する概念なので、覚えていて損はないでしょう
多重配列
Cでは、多重配列は少しややこしいですが、
Rubyではもっと簡単に行えます
a = [] #配列(大元)を宣言
b = [1,2] #子配列その1を宣言
c = [3,4] #子配列その2を宣言
a.push b #bを追加
a.push c #cを追加
p a # => [[1,2],[3,4]]
このように、配列に直接配列を代入することが出来ます
もちろん
p a # => [[1,2],[3,4]]
b.pop #bの末尾(=2)を削除
c.shift #cの先頭(=3)を削除
p a # => [1,4]
こんなことも出来ます
その他
Rubyには型の宣言が必要ないので、
配列でこんなことも出来ちゃいます
a = [] #配列(大元)を宣言
b = [2,3] #子配列を宣言
a.push 0 #0を追加
a.push b #bを追加
a.push "MIT" #文字列を追加
p a # => [0,[2,3],"MIT"]
数値、配列、文字列、3つの異なるオブジェクトを
1つの配列に代入することが出来ます
ブロック付きメソッド
端的に言えば、do~endで括るメソッドのことで、別名イテレータとも言われます
ブロック引数
ブロック付きメソッドで受け取る引数です
まあ、まずは下のソースを見てください
for( i = 0 ; i < 3 ; i++ )
{
printf("%d",&i);
}
このCのソースをRubyに変換すると、こうなります
3.times do |i|
puts i
end
「|i|」の部分がブロック引数です
無論、ブロック内には好きな変数名を入れて構いません
配列の要素を表示
さっきの要領で、配列内の要素を全て表示します
例えば
a = [4,2,8,5,0]
とあったとします
これをRubyのソースで表示してみましょう
a.size.times do |i|
puts a[i]
end
「a.size」で、配列の大きさを数値化しています
eachメソッド
Rubyには「each」という、配列専用のメソッドがあります
このeachを使って、先ほどの配列の要素を表示するとこうなります
a.each do |e|
puts e
end
今回のブロック引数「|e|」には、ループ回数でなく、配列の要素が先頭から順番に入ります
each_with_indexメソッド
このメソッドは、2つのブロック引数を受け取ります
a = ["Hello","MPC","member"]
a.each_with_index { |e,i| puts "#{i} : #{e}" }
[実行結果]
0:Hello
1:MPC
2:member
補足:ブロック引数では、|i|を「インデックス」(index)、|e|を「要素」(element)と呼びます
Array.new
簡単に言えば、配列を作るメソッドです
a1 = Array.new
a2 = []
上の2つは全く同じ動作をしています
なら、このメソッドを使う必要性は?
まずは引数を与えることで、配列のサイズを指定できます
p Array.new(4) # => [nil, nil, nil, nil]
ちなみにnilは、Cで言うNULLと同じです
また、ブロックで与えた値で配列内を初期化できます
p Array.new(3) { "MPC" } # => ["MPC", "MPC", MPC]
さらに、ブロック内でブロック引数を受け取ることも出来ます
p Array.new(4) {|i| i} # => [0, 1, 2, 3]
最終更新:2009年05月28日 21:48