_ で書き始める
$ で始まる変数はグローバル変数
if - 分岐
if 条件1 then ブロック1 elsif 条件2 then ブロック2 : : else ブロックelse end
条件1 が成り立つときは ブロック1 を、 条件2 が成り立つときは ブロック2 を、…、 いずれでもないときは ブロックelse を、 評価する。
while - 条件が成り立つ間の繰り返し
while 条件 ブロック end
条件 が真である間 ブロック を繰り返す。
case - 選択
case 値 when 値1[,値1b,…] ブロック1 when 値2 ブロック2 else ブロックelse end
case 直後に書いた 値 を後続する
when の後の値と比較し、一致したらそのすぐ後の
ブロックを評価する。どの when の値にも一致しなかった
ときは else 後のブロックに進む。
break
while などの構文を抜けて次に進む。
next
while などの繰り返し構文の次の回に進む。
条件の評価からやりなおす。
redo
while などの繰り返し構文のブロック先頭に進む。
条件の評価はしない。
| 比較演算子 | 意味 |
|---|---|
| == | 左辺と右辺が等しいか |
| < | 左辺が右辺より小さいか |
| <= | 左辺が右辺以下か |
| > | 左辺が右辺より大きいか |
| >= | 左辺が右辺以上か |
| && | 「かつ」 |
| || | 「または」 |
| ! | 否定 |
| not | 否定 |
条件が成り立つ場合は、真を表す true が、
成り立たない場合は偽を表す false を返す。
| 演算子 | 意味 |
|---|---|
| + | 加算 |
| * | 乗算 |
| - | 減算 |
| / | 除算 |
| % | 剰余 |
| ** | 巾乗(べき乗) |
| = | 通常代入 x=5 |
| += | 加算代入 x+=5 でxが5増える |
| *= | 乗算代入 x*=5 でxが5倍になる |
| -= | 減算代入 x-=5 でxが5減る |
| /= | 除算代入 x/=5 でxが1/5になる |
| %= | 剰余代入 x%=5 は x = x%5 と同じ |
| **= | 巾乗代入 x**=5 は x=x**5と同じ |
メソッド定義は以下の形式で行なう。
def メソッド(引数リスト) 定義本体 end
の形式で メソッド を定義する。
def foo(x, y) end
とすると、2つの引数を取るメソッド foo が定義される。
x と y は仮引数と呼び、
呼ぶときに渡された2つの値がその順番で代入される。定義した
foo メソッドを呼ぶときは、
foo(a, b)
のようにする。メソッドの引数を省略可能とすることもできる。
def bar(x, y="foo") end
とすると第2引数を省略可能になる。省略時の値が "foo"
となる。
times - 回数指定の繰り返し
N.times do 繰り返し本体 end
繰り返し本体 を N 回繰り返す。
upto と downto - 数えながらの繰り返し
M.upto(N) do |変数| 繰り返し本体 end
整数 M から N まで(M < N)を 変数 に代入しながらブロックを繰り返す。
1.upto(10) do |x|
printf("%d, ", x)
end
は1〜10までの整数を全てカンマ区切りで出力する。
downto は、upto の逆で
大きい数から小さい数に向かって繰り返しを行なう。
step - 数えながらの繰り返し
B.step(G, S) do |変数| 繰り返し本体 end
初期値 B から始めて、Sずつ 数を増やしながら G まで変化する数を 変数 に代入しながら繰り返しを行なう。 以下に例を示す。
s = 0
1.step(99, 2) do |n|
s += n
end
printf("1〜99の合計は %d です。\n", s)
for - 配列要素すべてに対する繰り返し
for 変数 in 配列 do 繰り返し本体 end
配列 の要素を1つずつ取り出し順次 変数 に代入してブロックを繰り返す。
each - 配列要素すべてに対する繰り返し
配列.each do |変数| 繰り返し本体 end
for と同じ働きを持つ。
値の1次元的な集合を表すのが配列。先頭要素は添字0でアクセスする。 Rubyでは配列の要素にどんな種類の値が入っても構わない。
[1, nil, "foo", [2, true], 3.14]
という配列も可能で、これは第0要素から順に
整数の1、nil、文字列の "foo"、
配列の [2, true]、浮動小数点数の3.14が格納されている。
配列に備わっている代表的なメソッドには以下のものがある。
length | 要素数を返す |
sort | 並べ換え |
reverse | 逆順化 |
uniq | 重複要素の削除 |
delete(val) | 指定要素の削除 |
shift | 先頭要素を取り出して削除 |
unshift(val) | 要素を配列の先頭に追加 |
<< val | 要素を配列の末尾に追加 |
index(val) | 指定要素の位置を返す |
配列の添字を任意の値にできるものがハッシュである。
ハッシュ値のリテラル表記はブレース(中括弧; {})を用いる。
{key1, value1,
key2, value2,
key3, value3, ...}
ハッシュの各要素にアクセスするときの記法は配列と同じく
ブラケット(大括弧; [ ])を用いる。
x[v] = gets.chomp
は、ハッシュ x の v というキーに
標準入力から読んで改行を取ったものを結び付ける。
Rubyプログラムにデータを与えるには,
./program.rb datafile.txt
./program.rb (その1) データ1 データ2 : [C-d] ./program.rb < datafile.txt (その2) cat datafile.txt | ./program.rb (その3)
の方法がある。
1と2はgetsのみで,
while readbuffer=gets 〜処理〜 end
という構成で,3はopenメソッドを用い
open(file, "r") do |handle|
while readbuffer=handle.gets
〜処理〜
end
end
という構成で作成する。
. (ピリオド) | 任意の1字 |
|---|---|
[文字クラス] | 選択 |
* | 直前の正規表現の0回以上の繰り返し |
+ | 直前の正規表現の1回以上の繰り返し |
? | 直前の正規表現の0か1の繰り返し |
{N} | 直前の正規表現の N回の繰り返し |
{N,} | 直前の正規表現の N回以上の繰り返し |
{M,N} | 直前の正規表現の M〜N回の繰り返し |
^ | 行頭 |
$ | 行末 |
\w | 英数字 [0-9A-Za-z_] |
\W | 非英数字(\wの逆) |
\s | 空白文字 [ \t\n\r\f] |
\S | 非空白文字(\sの逆) |
\d | 数字 [0-9] |
\D | 非数字(\dの逆) |
\b | 単語境界 |
\B | 非単語境界 |