2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on...

162
Yuichiro MASUI <[email protected]> Rubyの基礎 PHPer向け

Transcript of 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on...

Page 1: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Yuichiro MASUI <[email protected]>

Rubyの基礎PHPer向け

Page 2: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

そのまえに・・・

Page 3: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

自己紹介

Page 4: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

増井 雄一郎masuidrive

株式会社ワイズノット株式会社オープンソース総合研究所

Page 5: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

1992高校2年で

フリープログラマー

Page 6: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

1996PlayStationのゲームとか作ったりネットしたり

Page 7: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

1999大学6年生で会社立ち上げ

Page 8: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ネット全般なんでも屋DoCoMoの仕事とか

Page 9: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ビジネスモデルなんて何もない

Page 10: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2002PukiWiki開発チーム

立ち上げ

Page 11: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2004会社畳む

Page 12: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Distroの手伝いしたり組み込みLinuxしたり

Page 13: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Distroの手伝いしたり組み込みLinuxしたり

Page 14: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Distroの手伝いしたり組み込みLinuxしたり

Page 15: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2005/4Railsに出会う

Page 16: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2005/1210分で作るRailsアプリムービー&雑誌記事公開

Page 17: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

予想通りの大反響

Page 18: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2005後半からなるべくRailsで仕事をしていた

Page 19: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2006Rails仕事だけで一年食うを目標に

Page 20: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2006/04フルRailsのモール

オープン

Page 21: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2006/05WEB2.0から

PingKingリリース

Page 22: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2006/07デザイン会社SHIFTと

コラボa new city guide

Page 23: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
Page 24: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ファンクラブサイト大学ミスコンブログ

and more...

Page 25: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
Page 26: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ITProの記事を見てNIFTYから次のお誘い

Page 27: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

次の仕事が決まっていたのでα版までの契約

Page 28: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

その後は他社に引き継ぎでもRailsやったことない

Page 29: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

OJT込みで

Page 30: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

企画からだったのでとりあえず合宿

Page 31: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

もちろんRailsでon the fly programming

Page 32: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

色々サンプルを作った結果が今の形

Page 33: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

一年ホントにRails仕事だけで食えちゃった

Page 34: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

しかも札幌に住みながら

Page 35: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

しかも札幌に住みながら

Page 36: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

しかも札幌に住みながら

Page 37: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

2007/06アバウトミーリリース

Page 38: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”
Page 39: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

PHPの方

Page 40: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Javaの方

Page 41: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Perlの方

Page 42: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

10分ムービーを見た方

Page 43: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

実際にやってみた方

Page 44: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Railsのアプリを構築した方

Page 45: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

作ったアプリを公開しちゃった方

Page 46: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyでつまづきそうな所をなんとなく理解してもらう

Page 47: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

つまづく所

Page 48: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

正規表現ブロックイテレータ

リフレクションオープンクラス

Page 49: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Ruby1993年生まれ 14歳

Page 50: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

素直なオブジェクト指向

Page 51: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

文法がシンプル

Page 52: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

100.times do |i| puts iend

Page 53: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

全てがオブジェクト

Page 54: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

puts 10.to_s+"Yen"

Page 55: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

PHPとの違い

Page 56: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

変数

Page 57: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ten = 10

Page 58: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

英小文字,もしくは_で始まる$で始まるとグローバル変数@で始まるとインスタンス変数@@で始まるとクラス変数

Page 59: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

インスタンス変数とクラス変数については

後ほど

Page 60: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

変数スコープ

Page 61: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

変数の頭に$が付くのはグローバル変数だけ

Page 62: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ブロック単位でスコープが存在する

Page 63: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

function func($v) { if($v==1) { $var = 'test'; } echo $var;}func(1);=> test

PHP

Page 64: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def func(a) if a==1 var = 'test' end puts varendfunc(1)=>

Ruby

Page 65: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

PHPは同じ関数内ならどこでも変数を操作可能

Page 66: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyではローカル変数のスコープはブロック内でのみ

使用可能

Page 67: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def func(a) var = ‘’ if a==1 var = 'test' end puts varendfunc=> test

Ruby

Page 68: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

親ブロックの変数を子ブロックで

書き換えることは可能

Page 69: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

定数

Page 70: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

"文字定数"'文字定数'

"文字定数#{式}"ダブルクオートのみ

Page 71: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

puts <<__EOD__ヒアドキュメントも使えます__EOD__

Ruby

Page 72: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

英大文字で始まるのは定数LENGTH=10

Page 73: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

配列

Page 74: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

添え字は0から[式, 式, 式..]で配列生成配列にアクセスするには

配列[添え字]

Page 75: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ary = [1,2,3]ary << 4p ary=> 1, 2, 3, 4p ary.pop=> 4p ary.pop=> 3

Page 76: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ハッシュ連想配列

Page 77: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

キーはなんでもいい{キー1=>値1, キー2=>値2}

でハッシュ生成ハッシュ[キー]でアクセス

Page 78: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

hash = {'k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3'}p hash['k2']=> v2

Page 79: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

シンボル

Page 80: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

コロンで始まる文字列:class:include:ver1

:"ver3.5"

Page 81: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

たいていの場合はStringと交換可能

Page 82: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Page 83: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

1+1func1()val = 2*3index += 2

foo, bar, baz = 1, 2, 3foo, *bar = 1, 2, 3

range = 2..5

Page 84: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

i++は無い!

Page 85: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

i < 10i != 0

test && functest || funcnot val!val

Page 86: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

正規表現

Page 87: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

正規表現もオブジェクト

Page 88: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

/^A.*Z/

Page 89: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

str ~= /^A.*Z//^A.*Z/.match(str)

Page 90: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

カッコ付けなくてイイ

Page 91: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

puts('test')↓

puts 'test'

Page 92: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

カッコ以外にも色々省略可能

行末の;も要らない

Page 93: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

if a==b then test()end ↓if a==b testend

Page 94: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ハッシュ(連想配列)を表す{}も省略可能

Page 95: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

func({:order=>'date', :user=>'a'})↓

func :order=>'date', :user=>'a'

Page 96: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ブロック

Page 97: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

プログラムをひとくくりにするのが

ブロック

Page 98: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ブロックは{ ... }でも

do ... endでもいい

Page 99: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyではブロックもオブジェクト化できる

Page 100: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

イテレータのところで説明

Page 101: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

制御構造

Page 102: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

分岐

Page 103: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

if a==b func1()elsif c==b func2()else func3()end

Page 104: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

unless a==b func1()else func2()end

if !(a==b) func1()else func2()end

=

Page 105: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

puts("Hi!") if name=="Taro"

buy() unless wallet.empty?if修飾子

Page 106: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

case fruitswhen 'orange', 'apple' puts 'Love'when 'kiwi' puts 'Hate!'else puts "What's?"end

Page 107: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

case hourwhen 4..9 puts '朝'when 10..19 puts '昼'when 20..23, 0..3 puts '晩'end

Page 108: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

繰り返し

Page 109: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

for i in [1,2,3] puts iend

i = 0while i<3 puts i i += 1end

Page 110: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyで繰り返しといえばイテレータ

Page 111: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

イテレータ (Iterator) とは、プログラミング言語において配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。実際のプログラミング言語では、オブジェクトまたは文法などとして現れる。反復するためのものの意味で反復子(はんぷくし)と訳される。イテレータには内部イテレータと外部イテレー

タの区分がある。

イテレータ - Wikipedia

Page 112: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ファイル読み込みのように件数が分からないループとかに

向いている

Page 113: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

while($books->hasNext()) { $book = $books->next(); echo $book->getName()."\n";}

PHPで外部イテレータ

Page 114: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

books = [Book.new,...]books.each do |book| puts book.nameend

Rubyで内部イテレータ

Page 115: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

5.times do |i| puts iend

Rubyで内部イテレータ

Page 116: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

a = [1,3,5,6,7,10]p a.select { |i| i % 2 == 0 }

Rubyで内部イテレータ

a = [1,3,5,6,7,10]p a.map { |i| i * 2 }

Page 117: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

繰り返しをforなどではなくメソッドで行う

Page 118: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyのイテレータの仕組み

Page 119: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Books def each ..... yield ..... endend

呼び出し時に付けたブロックを呼び出す

Page 120: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

books.each do |str| puts strend

Page 121: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

books.each do |str| puts strend

Page 122: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def each for line in @lines yield line endend

books.each do |str| puts strend

Page 123: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def each for line in @lines yield line endend

books.each do |str| puts strend

Page 124: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

イテレータを使いこなせるとRubyっぽい書き方ができる

Page 125: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

メソッド定義

Page 126: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def func1 ....end

def func2(arg1) ....end

def func3(arg1,arg2=10) ....end

Page 127: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

def func1 return 1+1enddef func2 2+3end

返値

returnが無ければ最後に評価した式が返値

Page 128: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

例外処理

Page 129: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

begin ....rescue 例外クラス => e puts "Error!"ensure finalizer()end

必ず実行

例外処理

Page 130: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

func1() rescue error_handle()rescue 修飾子

Page 131: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

クラス

Page 132: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Book def name @name end

def name=(str) @name = str endend

クラス名は大文字からメソッド定義

インスタンス変数(メンバ変数)

メソッド名に=も使える

Page 133: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

book = Book.newbook.name = "Rails recipe"

p bookputs book.name

Page 134: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

book = Book.newbook.name = "Rails recipe"

p bookputs book.name

name=メソッドを呼び出し

Page 135: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

book.name = ‘Rails Recipe”は、属性変更に見えるが実はメソッド呼び出し

Page 136: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

コンストラクタはdef initialize .....end

Page 137: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

クラスメソッドスタティックメソッドシングルトンメソッド

Page 138: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Book @@owner = nil def self.owner @@owner end

def self.owner=(str) @@owner = str endend

クラスメソッド定義

クラス変数

クラス変数

Page 139: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Book.owner = 'Masui'book = Book.newputs book.owner=> "Masui"Book.owner = 'masuidrive'puts book.owner=> "masuidrive"

Page 140: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

クラスメソッドはクラス定義文のなかで呼び出しができる

Page 141: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Note < Book owner = ‘test’end

Page 142: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ダックタイピング

Page 143: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

もしもそれがアヒルのように歩きアヒルのように鳴くのなら

それはアヒルである

Page 144: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Stringの様に生成できStringの様に合成できるなら

Stringである

Page 145: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

JavaではStringであるなら必ず基底クラスはString

Page 146: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

Rubyではクラス名は重要ではない

Stringの様に振る舞えばいい

Page 147: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

オープンクラス

Page 148: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

クラスをいつでも変更可能

Page 149: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

StringだってIntegerだって好きにできちゃう

Page 150: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class String def hatena self+"?" endend"test".hatena=>test?

Page 151: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

ついでにオブジェクトにメソッド定義も出来ちゃう

Page 152: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

特異メソッド

Page 153: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

str = "test"def str.sharp "#"+selfendstr.sharp=> #test“test”.sharp=> Error!

Page 154: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

モジュール

Page 155: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

インスタンスを生成できないクラス↓

モジュール

Page 156: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

継承 & Mix-in

Page 157: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Note < Book def memo .... endend

Page 158: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Note extend Book def memo .... endend

Page 159: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

モジュールをクラスに読み込むのがmix-in

Page 160: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

class Note < Book include Enumeration def memo .... endend

Bookを継承したNoteにEnumerableの機能をMix-in!

Page 161: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

標準クラス

Page 162: 2007/09/29 PHP to Ruby - Webキャリアさん主催 ”PHPプログラマの為のRuby on Rails入門”

String - 文字列Integer - 整数Float - 実数Array - 配列

Hash - ハッシュ(連想配列)Time - 時間Range - 範囲