アットウィキロゴ

トップページ > Ruby > level1



最初に

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」で、英語そのままです
これも下の表で省略

条件 結果
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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。