- - 目次

rubyの基礎


rubyの「1行プログラム」

スクリプト言語としての雰囲気を知ってもらうためrubyの1 行プログラムをいくつか紹介しましょう.
# 由緒正しい Hello world.
print "Hello world\n"

# 入力ファイルの"From "を含む行を印刷する
while gets(); print if /From / end

# ファイルに行番号をつける
while gets(); print $., ":", $_ end

# πの計算
print 4*Math.atan2(1,1), "\n"

rubyのコメント

rubyのコメントは#から行末までです.

rubyの式

rubyの式は以下のものがあります(主なもの).

文字列

文字列はシングルクォート(')または ダブルクォート(")で囲まれたもので す.ダブルクォートで囲まれた文字列ではC言語の 文字列と同じようなバックスラッシュ (\)によるエスケープが指定できます. また,#{}で囲んだ範囲内の式の結果が埋め込まれ ます.

数値

整数,浮動小数点数が扱えます.

配列/連想配列

[]で囲まれた式の並びは配列を返し ます.{}で囲まれた式の並びは連想 配列を返します.

連想配列とは任意の種類のオブジェクトを添字にと る配列です.ハッシュ表とか辞書とか呼ばれること もあります.

変数/定数

rubyには変数が3種類と定数があります.変数/定数 の種別はその最初の1文字で区別できます.

ローカル変数

小文字のアルファベットから始まる.使う 時には代入で初期化する必要がある.

グローバル変数

$から始まる.未初期化の値 はnil.

インスタンス変数

@から始まる.未初期化の値 はnil.

クラス定数

大文字のアルファベットから始まる.未初 期化の値はnil.

代入

変数への代入は以下の形式です.

変数 = 式
メソッド(関数)呼び出し

あるオブジェクトに固有の操作(メソッド)を実行す るための形式は以下の通りです.

式 . メソッド名
式 . メソッド名 ( 式..)

曖昧でない限り引数の括弧は省略できます.

メソッドの実行主体であるselfのメソッド呼び出し は最初の式を省略できます.

メソッド名
メソッド名 ( 式..)

引数の無いメソッド呼び出しとローカル変数の参照 は代入の有無で区別されます.

演算子式

通常の数式は(C言語とほぼ同じ)演算子を使って表 現できます.ただし,内部的には演算子も(演算子 を名前に持つ)メソッド呼び出しとして処理されて います.

rubyの文

rubyでは任意の式をセミコロン(;)または改 行で区切った並びを文とします.文の値は一番最後に実行 された式の値です.

rubyの制御構造

rubyでは以下の制御構造が使用できます.

ifwhileの意味は通常の言語 とほぼ同じです.if文のthenはセミコロンまたは改行で代 用できます.C言語ではelse ifと記述するも のがrubyではelsifとひとつになっているこ とに気をつけてください.

caseは複数の比較をひとつにまとめるための 制御構造です.

forは配列などの要素をひとつずつ変数に代入しながらルー プします.

ループ内では以下の文が使えます.

break
ループの実行を中断します(Cのbreak相当).
next
ループの次の実行を開始します(Cのcontinue相当).
redo
ブロックの先頭行からやり直します.

良く使われる手続き

rubyのプログラムで良く使われる手続きをいくつか紹介し ておきます.これらはObjectクラスのメソッドで,どのク ラスからでも関数のように使えます.

exit([ステータス])

プログラムの実行を終了します.ステータスとして 整数が指定された時にはそれが終了ステータスとな ります.ステータスのデフォルトは0です.

gets

コマンドライン引数で指定されたファイル(群)から 1行読み込んで,その行を文字列として返します. コマンドライン引数が指定されていない時には,標 準入力から読み込みます.読み込んだ文字列は変数 $_にも代入されます.ファイルの終 りではnil(偽)を返します.

while gets
  ...
end

というのは良く使われる典型的なパターンです.

open(ファイル名[, モード])

ファイルをオープンします.モードは文字列でCの fopenと同じです.省略した時には読み込みモード でオープンされます.

print

出力関数.引数を順に標準出力に出力します.引 数が省略された場合には変数$_の値 を出力します.


- - 目次

matz@caelum.co.jp
Last modified: Wed Jan 28 12:16:41 JST 1998