以下、例を中心にRuby言語の基本を説明する。 細いことは説明しないので、適宜参考文献を見て欲しい。 使う構文は厳選する。
自宅で使う場合はRubyのインストール方法を見てください。
print "Hello, Yamaguchi\n" |
プログラムを実行する方法はRubyを動かしてみようを参照せよ。 以下でサンプルプログラムが用意されている場合があるが、その場合はプログラムを(右ボタンなどで)ダウンロードして、 Rubyを動かしてみようの(2)の方法で実行してみよ。 例えば、上のサンプルプログラムhelloyamaguchi.rbをダウンロードして実行してみよ。
上のプログラムを「実行」すると「print "Hello, Yamaguchi\n"」が実行されて、「Hello, Yamaguchi」が表示される。 \nは改行の指定である。 「"..."」は文字列である。「"」で囲わないと...をいろいろに解釈して計算してしまう。 「print "Hello, Yamaguchi\n"」は「文」の一種である。 プログラムを「実行」すると、プログラムのなかの文を(複数あれば順に)実行する。
例
i = 2 |
これを、変数に値を代入するという。変数iの値を2に変更するので、これを実行した後で、iの値を使おうとすると2が使われる。
print i*i |
式のなかに変数を書くと計算ではその変数に(直前に)代入された値を使う。
i = i + 1 |
代入は数学の恒等式とは違い、右辺を計算して、その値を左辺の変数に代入する。 上の代入ではiの値が1増える。
i += 1 |
Rubyでは変数に、整数でも実数でも代入することができる。 整数を代入した後で実数を代入したり、その逆もできる。
変数名の先頭が大文字の場合は代入が一度しかできない。 これは定数を定義するために使う。
四則演算は+, -, *, /で表す。 数学の記法と違い乗算も省略しない。*と/は+と/より優先する。()で囲んだ部分は先に計算する。 結合は左から右。つまり、1-2-3は(1-2)-3と解釈する。
数には整数と実数がある。Rubyでは整数には上限や下限はない。(多倍長計算といって、自動的に桁を増やす。) 実数は10進数で16桁程度の精度である。
整数を整数で割ると整数の割り算を行い商を求める。つまり、2/3は0となるので注意すること。 整数の割り算では余りを求める演算子(%)がある。%は意外によく使う演算子である。
y == 2007 |
booleanのデータに対する演算子に&&(積)、||(和)、!(否定)がある。
y == 2007 && m == 2 |
1 <= x && x <= 10 |
の時だけtrueとなる。
(1 <= x <= 10とは書けないので注意)
文字列に対しては「+」は文字列の結合の演算となる。
"1"+"2" |
a = [1,2,3] |
a[0] = -1 |
aが配列でない時に要素に代入しようとするとエラーになる。 そのようば場合は、以下のように空の配列としておいてから、要素に代入する。
a = [] |
m.length |
if 条件(booleanの値になる式) 条件が成りたったら実行する文 end |
一回の条件判断で成り立つ場合とそうでない場合に振り分けることができる。
if 条件(booleanの値になる式) 条件が成り立ったら実行する文 else 条件が成り立たなかったら実行する文 end |
条件が成り立たない場合更に他の条件で場合分けすることができる。
if 条件(booleanの値になる式) 条件が成り立ったら実行する文 elsif 次の条件 次の条件が成り立ったら実行する文 elsif 更に次の条件 更に次の条件が成り立ったら実行する文 else どれも成り立たなかったら実行する文 end |
例
if year % 4 == 0 print "leap year\n" end |
if i > 0 print "plus\n" elsif i == 0 print "zero\n" else print "minus\n" end |
if year % 4 == 0 leapYear += 1 print "leap year\n" end |
for 変数 in 始点..終点 変数=始点, 始点+1, ..., 終点に対して実行する文 end |
例
for i in 0..4 print i," ",i*i,"\n" end |
for i in 1..9 for j in 1..9 print i*j," " end print "\n" end |
while 条件 条件が成り立っている間繰り返し実行する文 end |
例
i = 13 while i != 1 if i%2 == 0 i /= 2 else i = 3*i + 1 end print i,"\n" end |
gets |
ARGV |
def repeat(n) for i in 1..n print "*" end end |
def half(i) i/2 end |
メソッドのなかで始めて使われた変数は、メソッドの中でだけ有効。 メソッドの外で使われた変数は同じクラスの他のメソッドから見える。
「ruby 3-11.rb 37」のように実行すると、37を華氏に変換して表示する。
与えられた整数の配列のなかで最大の要素の位置(先頭は0)と値を表示する。
"uraniwaniwaniwaniwatoriairu"のなかから"waniwaniwato"を見つける。 matc_at(s,p,i)はsのi文字目からpがあるかを調べるメソッド。
ライフゲームのシミュレーションプログラム。グライダーと名付けられたパターンが"飛ぶ"。
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*
*
*
*
*
*
*
*
*
*
|
コンピュータは人間の前回と前々回の手を記憶しておき、
例えば、
劇団員は、東大太郎、赤門花子、銀杏冴子の3名からなる。 役は、千尋、湯婆婆、番台蛙からなる。 赤門花子が千尋なら東大太郎は湯婆婆はやりたくないといっているので、 その条件を満たすような割り当てを全て表示する。
シーザー暗号は次の通り。
プログラムを作成して暗号を復号せよ.(「"」は区切りであり文字列の一部ではない。) 鍵は不明であるが,復号した平文には"person"が含まれていることが分かっているとする.
n0,n1,...nN-1を指定して、 そのあみだくじを通すと0〜N-1がn0,n1,...nN-1に入れ替わるようなあみだくじを作る。