FrontPage  Index  Search  Changes  RSS  wikifarm  Login

Rubyリファレンス

2011.07.25

近々整理する

章立て

  • コマンドラインからのデータ入力
  • 繰り返し
    • for文
    • while文
    • timesメソッド
  • 条件分岐
    • if文
  • ファイル入出力
  • 算術演算
    • 割り算
    • Mathモジュール
    • 複素数
  • 配列
    • 配列の作り方
    • インデックスの使い方
  • 7 メソッド
    • 7.1 メソッド呼び出し
    • 7.2 メソッドの分類
    • 7.3 メソッドの定義
  • 18
    • 18.9 多重代入

コマンドラインからのデータ入力

コマンドラインからのスクリプトの引数として与えられた文字列を, ARGVという配列オブジェクトに持つ.

#例
print "最初の引数:",ARGV[0],"\n"
print "2番目の引数:",ARGV[1],"\n"
print "3番目の引数:",ARGV[2],"\n"

ARGVに格納されたデータは文字列であるから, 計算に使う際には型変換をする必要がある. 整数にする場合にはto_iメソッドを使う.

#整数に型変換する場合
num0 = ARGV[0].to_i
num1 = ARGV[1].to_i
print num0 + num1,"\n"

繰り返し

for文

一般的な構文

for 変数 in オブジェクト do
  処理
end

doは省略可能.

#例
sum = 0
for i in 1..5
  sum = sum + i
end
print sum,"\n"

「..」や「...」は範囲オブジェクトである. オブジェクトを配列にした場合の例を載せる.

names = ["aa" , "bb" , "cc" , "dd"]
for name in names
  print name,"\n"
end

配列の中から1つずつ要素を取り出して、それぞれを表示する.


while文

while 条件 do
 処理
end

例: 1から10までの数を順番に表示する

i = 1
while i <= 10
  print i, "\n"
  i = i + 1
end

timesメソッド

回数が決まっているときはこっちが楽.

繰り返す回数.times do
 処理
end

条件分岐

if文

if 条件 then
  文
end
if 条件1 then
  文1
elsif 条件2 then
  文2
else
  文3
end

ファイル入出力

IOクラスのサブクラスであるFileクラスで行える. Fileクラスにはファイルの削除やファイルの属性変更など,ファイルシステムに特化した機能が実装されているが, 基本的な入出力操作はIOクラスから受け継いだメソッドを使う。

ファイルを開いて新しいFileオブジェクトを得るには, openメソッド,またはFile.openメソッドを使う。

io = open(file , mode)
io = File.opne(file , mode)

modeには以下のモードを指定する.

モード意味
"r"読み込み専用でファイルを開く
"r+"読み込み / 書き込み用としてファイルを開く
"w"書き込み専用でファイルを開く.ファイルがなければ新たに作成する.またすでに存在する場合には,ファイルサイズを0にする.
"w"読み込み / 書き込み用,その他は"w"と同じ
"a"追加書き込み専用でファイルを開く,ファイルがなければ新たに作成する
"a+"読み込み / 追加書き込み用としてファイルを開く.ファイルがなければ新たに作成する.

算術演算

演算子演算
+加算
-減算
*乗算
/除算
%剰余
**べき乗

IntegerオブジェクトとFloatオブジェクトを計算した結果はFloatオブジェクトになる.

割り算

数値オブジェクトには,/%の他にも割り算に関するメソッドがある.

x.divmod(y)

xをyで割ったときの商と余りを,配列にして返す.

Mathモジュール

三角関数や対数関数などの数学っぽいやつの演算で使うモジュール.

Math.sqrt(2)

のようにモジュール名を明示的に指定する方法と,

include Math

でインクルードする方法がある.

#例
f = 2
p Math.sqrt(f)
include Math # Mathモジュールのインクルード
p sqrt(f)

Mathモジュールで提供されるメソッドで,よく使いそうなメソッド

メソッド名意味
cos(x)余弦関数
sin(x)正弦関数
exp(x)指数関数
log(x)底をeとする対数
log10(x)底を10とする対数
lox2(x)底を2とする対数
sqrt(x)平方根

Mathモジュールが提供する定数

定数名意味
PI円周率
E自然対数の底e

複素数

require "complex" # Ruby 1.9では不要
a = Complex(3, 5)
b = Complex(2, 4)
p a*b # => Complex(-14, 22)

実部と虚部を取り出すには,Complex#real,Complex#image

p a.real
p a.image

配列

配列の作り方

nums = [1, 2, 3, 4, 5]
strs = ["a", "b", "c", "d"]

他には,Arraw.newを使う.

a = Array.new
p a #=> []
a = Array.new(5)
p a #=> [nil, nil, nil, nil, nil]
a = Array.new(5, 0)
p a #=> [0, 0, 0, 0, 0]

要素が文字列で空白を含まないなら,%wを使える.

lang = %w(Ruby Perl Python Scheme Pike REBOL)
p lang #=> ["Ruby", "Perl", "Python", "Scheme", "Pike", "REBOL"]

インデックスの使い方

配列にインデックスを指定することで,要素を取り出せる.

  • a[n]

7 メソッド

メソッドは,オブジェクトを操作するもの。 Rubyでは,全ての操作がメソッドとして実装されている。

7.1 メソッド呼び出し

一般形

オブジェクト.メソッド名(引数1, 引数2, ..., 引数n)

オブジェクト指向の世界では,メソッドを実行することを 「オブジェクトにメッセージを送る」「オブジェクトはメッセージを受け取る」と解釈する。 上の構文でのオブジェクトをレシーバという。

7.2 メソッドの分類

インスタンスメソッド

あるオブジェクト(インスタンス)をレシーバとするメソッド。

### インスタンスメソッドの例
"10, 20, 30, 40".split(",")
1000.integer?

obj =~ arg1
obj[arg1] = arg2
obj + arg1

後半は構文が違うが,演算子の形をしたメソッドである。 Rubyでは既存のメソッドをユーザが再定義できる。

クラスメソッド

レシーバがクラス。例えば,インスタンスを作る場合など。

### クラスメソッドの例
a = Array.new
f = File.open("some_file")
t = Time.now

クラスメソッドの呼び出しには,「.」の代わりに「::」も使える。

関数的メソッド

レシーバがないメソッド。本当にないわけではなく,省略されている。

### 関数的メソッドの例
print "Hello!"
sleep(10)

7.3 メソッドの定義

メソッド定義の一般的な構文

def メソッド名(引数1, 引数2, ...)
  実行したい処理
end

メソッド名には,アルファベット,数字,「_」が使える。数字で始めることはできない。 インスタンスメソッドやクラスメソッドを定義するには,先にクラスを定義する必要がある。

デフォルト値

「引数名 = 値」と書くと, 引数を省略してメソッドを呼び出したときに使われる値を指定できる。

### 引数のデフォルト値が指定されているメソッドの例
def hello(name = "Ruby")
  print "Hello, ", name, ".\n"
end

hello() # 引数を省略して呼び出し
hello("Newbie") # 引数を指定して呼び出し

メソッドが複数の引数を持つ場合, 引数リストの右端から順にデフォルト値を指定する。

def func(a, b=1, c=2)
  ...
end

メソッドの返り値

return 値

値を省略した場合は,nilが返される。 return文を省略した場合は, メソッドの中で最後に得られる値が返り値となる。
また,メソッドを途中で終了させるときもreturn文を使うことができる。

18.

18.9 多重代入

メソッドから複数の返り値を得る。

def hogehoge()
...
  return x, y, z
end

このメソッドを使う際に,

a, b, c = hogehoge()

とすると, a => x, b => y, c => zとなる。

Last modified:2011/07/25 18:38:36
Keyword(s):
References:[Ruby]