ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf ·...

40
2007/7/31 2007/7/31 (c) (c) チャイナ保証ネットワーク株式会社 チャイナ保証ネットワーク株式会社 Ruby入門 Ruby入門

Upload: others

Post on 05-Sep-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

Ruby入門Ruby入門

Page 2: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

流れ流れ

Rubyの文法Rubyの文法

�� 画面に出力画面に出力

�� キーボードから入力キーボードから入力

�� 数値、文字列数値、文字列

�� 変数変数

�� 配列、ハッシュ配列、ハッシュ

�� 制御構造(分岐・繰り返しなど)制御構造(分岐・繰り返しなど)

–– ifif、、 whilewhile、、casecase、、 forfor、、eacheach

�� 関数関数

�� クラスクラス

Page 3: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

RubyとはRubyとは

�� プログラミング言語プログラミング言語

�� インタプリタ言語インタプリタ言語

��オブジェクト指向オブジェクト指向

��国産国産

��ウェブアプリケーションフレームワークウェブアプリケーションフレームワーク

RubyOnRailsで注目RubyOnRailsで注目

––弊社でのWebアプリケーション開発に利用弊社でのWebアプリケーション開発に利用

Page 4: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

画面に出力画面に出力

puts puts ““hello world.hello world.””

Page 5: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

キーボードから入力キーボードから入力

gets

例) puts gets # 入力をそのまま画面に出力

“abc” と入力する場合、gets では ”abc¥n” のように 改行コード が最後に入る。

これを取り除くには、 gets.chomp とする。

Page 6: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

四則演算四則演算

単純な例:単純な例:

�� puts 1 + 1puts 1 + 1 #=> 2#=> 2

�� puts 3 puts 3 –– 11 #=> 2#=> 2

�� puts 1 * 2puts 1 * 2 #=> 2#=> 2

�� puts 10 / 5puts 10 / 5 #=> 2#=> 2

�� puts 10 % 2puts 10 % 2 #=> 5#=> 5

複雑な例:複雑な例:

�� puts 1 + ( 1 puts 1 + ( 1 –– 2 * ( 4 2 * ( 4 –– 1 ) ) 1 ) ) #=> #=> --44

Page 7: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

文字列文字列

puts puts ““文字列文字列”” #=> #=> 文字列文字列

puts puts ‘‘これも文字列これも文字列’’ #=> #=> これも文字列これも文字列

�� エスケープシーケンスエスケープシーケンス

puts puts ““改行は改行は¥¥nnこうするこうする””

#=> #=> 改行は改行は

こうするこうする

puts puts ‘‘これだとこれだと¥¥nn改行されない改行されない’’ #=> #=> これだとこれだと¥¥nn改行されない改行されない

puts puts ‘‘これにこれに¥¥’’注目注目¥¥’’してしてほしいほしい’’ #=> #=> これにこれに’’注目注目’’してほしいしてほしい

�� 文字列文字列文字列文字列のののの結合結合結合結合文字列文字列文字列文字列のののの結合結合結合結合

puts puts ““こんにちはこんにちは”” + + ““こんばんはこんばんは””

#=> #=> こんにちはこんばんはこんにちはこんばんは

Page 8: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

数値と文字列の変換数値と文字列の変換

�� 文字列を数値へ文字列を数値へ

–– ““100100””..to_ito_i # # 整数整数

–– ““12.512.5””..to_fto_f ##  浮動小数点数浮動小数点数

�� 数値を文字列へ数値を文字列へ

–– 100.100.to_sto_s

�� 変換しないといけない例:変換しないといけない例:

a = 1a = 1  ; b = ; b = ““22”” ; puts a + b; puts a + b

Page 9: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

RubyRubyの変数の変数

��変数を宣言しなくてよい変数を宣言しなくてよい

––実際に使用するときにいきなり使える実際に使用するときにいきなり使える

num = 3num = 3

��変数には型がない変数には型がない

––中に入っているオブジェクトが動的に変化中に入っているオブジェクトが動的に変化

a = 1a = 1

a = a = ““foofoo”” # # 数値が入っていたところに文字列を代入数値が入っていたところに文字列を代入

Page 10: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

変数の使用例変数の使用例

�� 変数に値を代入変数に値を代入

num = 1num = 1

strstr = = ““文字列文字列””

�� 変数の値を出力変数の値を出力

puts numputs num #=> 1#=> 1

puts puts strstr #=> #=> 文字列文字列

�� 変数から変数に代入変数から変数に代入

strstr = num= num

puts puts strstr #=> 1 (#=> 1 (数値数値))

�� 変数で計算変数で計算

puts puts strstr + num+ num #=> 2 (#=> 2 (数値数値))

Page 11: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

変数と四則演算変数と四則演算

��変数に特定の値を加減乗算する変数に特定の値を加減乗算する

a += 4a += 4

a a --= 4= 4

a *= 4a *= 4

a /= 4a /= 4 # 0 # 0 を指定するとエラーが起こるを指定するとエラーが起こる

Page 12: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

配列配列

�� 宣言・初期化宣言・初期化

a = [] a = [] ((空の配列)空の配列)

a = [1,2,3]a = [1,2,3]

�� 追加追加

a << 4a << 4

a += []a += []

�� 参照参照

a[0]a[0]

a.firsta.first ((一番はじめの要素)、一番はじめの要素)、a.lasta.last ( (一番最後の要素)一番最後の要素)

�� 配列の中身の個数配列の中身の個数

a.sizea.size

Page 13: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

ハッシュハッシュ

�� key key とと value value のペアを格納する配列のペアを格納する配列

�� 別名・連想配列別名・連想配列

�� jankenjanken = { # key => value= { # key => value

““グーグー”” => 0,=> 0,

““チョキチョキ”” => 1,=> 1,

““パーパー”” => 2 }=> 2 }

�� jankenjanken[[““パーパー””] ] #=> 2#=> 2

–– keykeyを添え字にすると、ペアになっているを添え字にすると、ペアになっているvaluevalueが返るが返る

�� 使用例:英日辞書プログラム使用例:英日辞書プログラム

Page 14: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��比較比較

•• a a << bb : a : a はは b b より小さいより小さい

•• a a <=<= bb : a : a はは b b 以下以下

•• a a =>=> bb : a : a はは bb 以上以上

•• a a >> bb : a : a はは b b より大きいより大きい

•• a a ==== bb : a : a とと b b は等しいは等しい

•• a a !=!= bb : a : a とと b b は等しくないは等しくない

•• 条件を満たす場合は条件を満たす場合は true(true(真)真)

•• 満たさない場合は満たさない場合は false(false(偽偽))

Page 15: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

�� 条件分岐条件分岐

–– if if 文文

a = 1a = 1

ifif a == 1a == 1

puts puts ““11ですです””

elsifelsif a == 2a == 2

puts puts ““22ですです””

elseelse

puts puts ““11でもでも22でもありませんでもありません””

endend

Page 16: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��複数条件分岐複数条件分岐

–– casecase文文case numcase numwhen 1when 1puts puts ““11ですです””

when 2, 4, 6when 2, 4, 6puts puts ““2,4,62,4,6のどれかですのどれかです””

when 4..7when 4..7puts puts ““4~74~7の範囲ですの範囲です””

elseelseputs puts ““条件以外です条件以外です””

endend

Page 17: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��繰り返し繰り返し

–– while while 文文

while a < 10while a < 10

puts aputs a

a += 1a += 1

endend

Page 18: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��繰り返し繰り返し

–– uptoupto 文文

0.0.upto(10) { |i|upto(10) { |i|

puts iputs i

}}

※※ CC言語の言語の for( for( intint i = 0; i <= 10; i+){i = 0; i <= 10; i+){・・・・・・}}

    に相当に相当

Page 19: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��繰り返し繰り返し

–– times times 文文

�� 100100回繰り返す回繰り返す

�� i i はは00からスタートからスタート

100. 100. times { |i|times { |i|

puts iputs i

}}

Page 20: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

制御構造制御構造

��配列の繰り返し配列の繰り返し

–– eacheachメソッドメソッド

a = [1,2,3,4,5]a = [1,2,3,4,5]

a.eacha.each { |{ |varvar||

puts puts varvar

}}

–– forfor文文

for ( for ( varvar in a )in a )

puts puts varvar

endend

Page 21: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

メソッド(関数)メソッド(関数)

��今までに出てきたメソッド今までに出てきたメソッド

––putsputs, , getsgets

––gets.gets.chompchomp

––““11””..to_ito_i, , ““11””..to_f to_f ((文字列クラスのメソッド)文字列クラスのメソッド)

––1.1.to_s to_s ((数値クラスのメソッド)数値クラスのメソッド)

Page 22: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

メソッドの作り方メソッドの作り方

��関数の定義関数の定義

defdef plus(aplus(a, b), b)

returnreturn a + ba + b

endend

��利用利用

puts plus( 10, 12 )puts plus( 10, 12 ) #=> 22#=> 22

Page 23: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

return return の省略の省略

�� メソッドの最後に書いた行の値が戻り値になるメソッドの最後に書いた行の値が戻り値になる

def def plus( a, b, c )plus( a, b, c )

ans = 0ans = 0ans += aans += aans += bans += b

ans += cans += c

returnreturnreturn ansans # return # return が省略されているが省略されている

endend

Page 24: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

定数定数

��大文字で始まる変数大文字で始まる変数

MAX_VALUE = 10MAX_VALUE = 10

�� メソッドの中では定義できないメソッドの中では定義できない

��一度初期化あとに再度代入しようとすると警一度初期化あとに再度代入しようとすると警

告がでる(エラーではないが非推奨)告がでる(エラーではないが非推奨)

Page 25: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスクラス

�� オブジェクトの定義オブジェクトの定義

�� クラス定義クラス定義

–– 例: 挨拶クラス例: 挨拶クラス

classclass Greeting1Greeting1 ## クラス名は必ず大文字ではじめるクラス名は必ず大文字ではじめる

# # インスタンスメソッドインスタンスメソッド

defdef greetgreet # # メソッド名は小文字で、単語ごとにメソッド名は小文字で、単語ごとに””__””で区切るで区切る

returnreturn ““こんにちはこんにちは””

endend

endend

Page 26: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスクラス

�� インスタンスの生成インスタンスの生成

varvar = Greeting1.new= Greeting1.new

varvarに生成されたに生成されたGreetingGreetingクラスのインスタンスが入っているクラスのインスタンスが入っている

�� インスタンスメソッドの呼び出しインスタンスメソッドの呼び出し

puts puts var.greetvar.greet #=> #=> ““こんにちはこんにちは””

Page 27: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスクラス

�� 挨拶する相手の名前を入力できるようにする挨拶する相手の名前を入力できるようにする

�� classclass Greeting2Greeting2attr_accessorattr_accessor ““namename”” # # アクセッサアクセッサ

defdef greetgreet

returnreturn ““こんにちは、こんにちは、”” + @+ @name + name + ““さんさん””

endend

# # 特殊なメソッド特殊なメソッド

defdef initialize(nameinitialize(name))

@name = name@name = name # # 挨拶をする相手の名前挨拶をする相手の名前

endend

endend

Page 28: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスクラス

�� initializeinitializeメソッドメソッド

インスタンスを生成するときに、インスタンスの初期化処理を行インスタンスを生成するときに、インスタンスの初期化処理を行

う場合に定義う場合に定義

�� インスタンス変数インスタンス変数

–– @@hogehoge のように、@から始まる変数のように、@から始まる変数

–– インスタンスごとに保持している値が異なるインスタンスごとに保持している値が異なる

–– インスタンス変数はインスタンスの外から使えないインスタンス変数はインスタンスの外から使えない

�� アクセッサアクセッサ

–– インスタンス変数をインスタンスの外から使えるようにするたインスタンス変数をインスタンスの外から使えるようにするた

めの定義めの定義

–– attr_accessorattr_accessor ““namename”” で定義するで定義する

–– greeting_instance.namegreeting_instance.name で値を取得したり、代入したりできで値を取得したり、代入したりでき

るようになるるようになる

Page 29: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスメソッドクラスメソッド

�� インスタンスを生成せずに実行できるメソッドインスタンスを生成せずに実行できるメソッド

classclass Greeting2Greeting2

# # 省略省略

defdef selfself.ask_name.ask_name

returnreturn ““あなたのお名前は何ですか?あなたのお名前は何ですか?””

endend

endend

�� クラス名クラス名..メソッド名メソッド名 で実行で実行

puts Greeting2.ask_nameputs Greeting2.ask_name

Page 30: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスの定数クラスの定数

�� クラスの中で定数を定義すると、クラスの中でクラスの中で定数を定義すると、クラスの中で

のみ有効な定数になるのみ有効な定数になる

classclass FooFoo

HOGE = HOGE = ““hogehoge””

endend

�� クラス外から参照する場合は、クラス外から参照する場合は、

Foo::HOGEFoo::HOGE

と記述すると参照できると記述すると参照できる

Page 31: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

クラスの継承クラスの継承

��親クラスのメソッドやインスタンス変数を受け親クラスのメソッドやインスタンス変数を受け

継いだクラスを定義継いだクラスを定義

classclass MyGreetingMyGreeting < Greeting1< Greeting1

# # なにもメソッドは定義していないなにもメソッドは定義していない

endend

��利用利用

a = a = MyGreeting.newMyGreeting.new

a.greeta.greet #=> #=> 親クラスのメソッドが呼ばれる親クラスのメソッドが呼ばれる

Page 32: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

メソッドのオーバーメソッドのオーバーライドライド

�� 親クラスで定義されているメソッドを再定義する親クラスで定義されているメソッドを再定義する

classclass EnglishGreetingEnglishGreeting < Greeting2< Greeting2

defdef greetgreet

returnreturn ““Hello Hello ““ + @name + + @name + ““..””

endend

def def self.self.ask_nameask_name

return return ““What is your name ?What is your name ?””

endend

endend

Page 33: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

挨拶クラスを使った例挨拶クラスを使った例

puts puts ““Can Can you speak you speak JapaneseJapanese?? (yes/no)(yes/no)””

ifif gets.chompgets.chomp == == ““yesyes””

puts Greeting2.ask_nameputs Greeting2.ask_name

g = Greeting2.new g = Greeting2.new gets.chompgets.chomp # # 日本語の挨拶日本語の挨拶

elseelse

puts puts EnglishGreeting.ask_nameEnglishGreeting.ask_name

g = g = EnglishGreeting.newEnglishGreeting.new gets.chompgets.chomp ##英語の挨拶英語の挨拶

endend

puts puts g.greetg.greet   ##  選んだほうの言葉で挨拶する選んだほうの言葉で挨拶する

Page 34: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

RubyRubyの組み込みクラスの組み込みクラス

�� 数値クラス数値クラス

–– 整数型クラス整数型クラス ((Integer {Integer {FixnumFixnum, , BignumBignum})})

–– 浮動小数点型クラス浮動小数点型クラス ((Float)Float)

�� 文字列クラス文字列クラス ((String)String)

�� シンボルクラス(シンボルクラス(Symbol)Symbol)

�� 配列クラス配列クラス ((Array)Array)

�� ハッシュクラスハッシュクラス ((Hash)Hash)

�� nilnilクラスクラス ((NilClassNilClass))

�� BoBoooleanlean–– truetrueクラス(クラス(TrueClassTrueClass))

–– falsefalseクラスクラス((FalseClassFalseClass))

Page 35: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

BooleanBoolean

��真真 or or 偽 の値をとる偽 の値をとる

��真:真: truetrue

��偽:偽: falsefalse

��比較演算をすると生成される比較演算をすると生成される

–– 100 > 10 100 > 10 #=> #=> truetrue

–– 10 > 10010 > 100 #=> false#=> false

Page 36: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

シンボル:シンボル:SymbolSymbol

��文字列クラスはインスタンスごとにオブジェク文字列クラスはインスタンスごとにオブジェク

トが違うトが違う

a = a = ““foofoo””

b = b = ““foofoo””

は別のインスタンスになるは別のインスタンスになる

�� シンボルではシンボルでは

a = :a = :foofoo

b = :b = :foofoo

  は同じインスタンスになるは同じインスタンスになる

Page 37: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

nil(NilClassnil(NilClass))とは?とは?

��空を意味するオブジェクト空を意味するオブジェクト

��次のような場合によく出現する次のような場合によく出現する

––戻り値を返さない関数の戻り値戻り値を返さない関数の戻り値

––配列やハッシュで値がない要素を参照配列やハッシュで値がない要素を参照

��例例

array = []array = []

array[2]array[2] #=> nil#=> nil

##値がないので値がないのでnilnilが返るが返る

Page 38: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

ブロックブロック

�� do do ~~ end end までのプログラムをオブジェクトにしたものまでのプログラムをオブジェクトにしたもの((このオこのオ

ブジェクトを手続きオブジェクトというブジェクトを手続きオブジェクトという))

�� 他の言語にはあまりない特殊な機能他の言語にはあまりない特殊な機能

�� 作成作成

hello = hello = Proc.newProc.new dodo

puts puts ““hellohello””

endend

# # 別の書き方:別の書き方:

hello2 = hello2 = procproc { puts { puts ““hellohello”” }}

�� 利用利用

hello.callhello.call #=> #=> ““hellohello”” と表示されると表示される

Page 39: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

ブロックブロック

�� ブロックに引数を渡すこともできるブロックに引数を渡すこともできる

greet = proc { |message|greet = proc { |message|

puts messageputs message

}}

greet.callgreet.call ““こんばんはこんばんは””

#=> #=> ““こんばんはこんばんは”” と表示と表示

greet.callgreet.call ““さようならさようなら””

#=> #=> ““さようならさようなら””と表示と表示

Page 40: Ruby入門 - ecl.info.kindai.ac.jpecl.info.kindai.ac.jp/~inotti/zemi_3/ruby_instruction.pdf · 2007/7/31 (c) チャイナ保証ネットワーク株式会社 流れ Rubyの文法

2007/7/312007/7/31 (c) (c) チャイナ保証ネットワーク株式会社チャイナ保証ネットワーク株式会社

ブロックブロック

�� 配列の配列のeacheachメソッドや、数値クラスのメソッドや、数値クラスのuptouptoメソッドのメソッドの {|{|i| }i| }  は は do |i| do |i| ~~ end end の別の書き方(若干違いはある)の別の書き方(若干違いはある)

0.0.upto(10) { |i|upto(10) { |i|

}}

0.upto(10) 0.upto(10) dodo |i||i|

endend

は同じ動作。は同じ動作。