_
で書き始める
$
で始まる変数はグローバル変数
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 | 非単語境界 |