名古屋ruby会議02 lt:ruby中級への道

Post on 15-Dec-2014

4.351 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

初級を抜け出すためにやったこと、「Ruby逆引きレシピ 232」「リファクタリングRuby」「メタプログラミングRuby」の面白かったところをお話させていただきます。

TRANSCRIPT

Ruby中級への道

NAGOYARubyKaigi022011/02/26

@suchi(Hamamatsu.rb)

suchihttp://www.suchi.org/

Ruby Lv: 初心者→中級?好きなメソッド: Object#tap

好きなrubyist: @m_seki好きなSNSDメンバ: TaeYeon

好きなアジャイルプラクティス: ありのままの進捗を計測好きなXPプラクティス: 計画ゲーム

好きなもの: 似てるもの

Hamamatsu.rb?

http://hamamatsu-rb.github.com/

3/9 Kickoff

Rubyレベル

NGRK01

「好きなメソッドはyieldと書きたかったんで

すが」http://www.youtube.com/watch?v=o8Y3mHpPAlE 02:35

yieldは

メソッドではなく

初心者から抜き出るには

いま風なのは

• 遅延評価勉強法(@amachang)

• つまみ食い勉強法

• パラシュート法

(野口悠紀雄「『超』勉強法」

http://d.hatena.ne.jp/amachang/20080204/1202104260

がこれまでを振り返ると

K&REffective C++/STL

ソフトウェア作法Software Tools

MachProgramming

Scheme

本日の水木サン

WindowsAPIMFC

XP

CODECOMPLETE

身についたのは全部

つまみ食いフルコース

Why?

高野豊rootから/への

メッセージ

http://www.amazon.co.jp/dp/4756107869

「管理者になるからにはBSDのmanは全部

読め」

ゲーテ

言わなくていいことをわざわざ言っちゃう人

(最近再ブレイク)

世界はお粥で出来ているのではない怠けてぐずぐずするな

堅いものなら噛め

二つに一つしかないのだ世界に負けて喉が詰まるか

それとも自分の力で消化するか

あこがれを持って、強く希求し、そしてそのためにどれほど膨大なコツコツが必要であるかに溜息をつきながら、投げ出さないで続けることって、難しいことですが、すごく豊かになれますよ(id: inflorescenciaさん)

http://d.hatena.ne.jp/inflorescencia/20071027/1193498546

amazonのペゾスさん

「PCや携帯電話、PDAのようなネットワークツールが普及することで、情報の断片的な収集(情報のつまみぐい)に慣れてしまい、長時間集中して本を読まなくなってきている」といった主旨のことを語ったという。また、「Kindleによって、そうしたことからの脱却を図りたい」とも述べていたという。

http://bizmakoto.jp/makoto/articles/1102/16/news013.html

戦略

• 基本からしっかり

• 重箱の隅ではなく全体感/体系

• 全部読む–時間がない?→トイレで読む

• (でもドライブする仕組みがあるといい)

たのしいRuby 2007/11/27-04/27Webアプリスーパーサンプル

2009/07/01-08/01

Rubyレシピブック268

2008/08/30-10/07 逆引きRails(2回目) 2009/10/22-12/20

Railsレシピ183 2008/10/07-10/16 Ruby逆引きレシピ232 2009/12/23-01/29

AWDwR 2008/11/17-03/03 Head First Rails 2010/03/23-04/05

一日でわかるRails 2009/01/07-01/10 Railsデプロイ 2010/04/08-04/21

Railsレシピ 183 2009/01/15-03/29 RailsOfRubyOnRails 2010/04/17-05/16

初めてのRuby 2009/03/30-04/16リファクタリングRubyエディション

2010/05/17-07/07

逆引きRails 2009/05/08-06/22メタプログラミングRuby

2010/09/07-11/20

アクティヴィティ

• 表紙から索引、後付まで全部読む

• レシピ本を全部読む

• 逆引き本を最初から読む ← オススメ!

– 中身忘れてもインデックスができる

• バーンダウンチャートでドライブ! ←オススメ!

• 社内Wikiに載せる

• トイレで読む

バーンダウンチャート

トラウマ

計るもの

• 残ページ数

• ユニット数

– レシピ番号

– 逆引き番号

• 10日毎に予測線←オススメ!

• あまり関係ない

– 消化ページ数

– 平均進捗/ここ10日の進捗

消化ユニット

残ユニット

1/1の予測ライン

1/10の予測ライン

脱初心者向け面白かった本

はじめに(Martin Fowler)

Q.オリジナルを持っているのにこの本も

必要なのか?

たぶんいらないだろう

ゲーテ

例: タイプコードの除去

• ふるまいをタイプコード(switch文等)で切り替えているコード

• オブジェクト指向(ポリモーフィズム)を理解していない場合が多い

• 重傷な場合は、クラスのタイプIDを取得してswitch文で振り分けていたり

本家リファクタリング

a.クラスによるタイプコードの置き換え

b.サブクラスによるタイプコードの置き換え

c.State/Strategyによるタイプコードの置き換え

Rubyエディション

a.クラスによるタイプコードの置き換え

b.タイプコードからモジュールのextendへ

c.State/Strategyによるタイプコードの置き換え

他にも

• モジュールの抽出

• テンプレートメソッドの作成

–モジュール版

• クラスアノテーションの導入

• 名前付き引数の導入

メタプログラミングRuby

クラスアノテーション導入によるリファクタリング

module CustomInitializers

def hash_initializer(*attribute_names)

define_method(:initialize) do |*args|

data = args.first || {}

attribute_names.each do |attribute_name|

instance_variable_set

"@#{attribute_name}", data[attribute_name]

end

end

endm

end

Class.send :include, CustomInitializers

class SearchCriteria...

hash_initializer :author_id, :publichsr_id, :isbn

end

クラスメソッド

class MyClass

def self.my_method;

:

end

end

def MyClass.my_other_method

:

end

これはどういうこと

class MyClass

class << self

def class_method;

:

end

end

end

クラスメソッドはClassの

特異クラスの特異メソッド

オープンソースのコードを読んで面食らうこと

ボブが易しく解説

• 「初めてのRuby」

– 他言語からの移行者に特にオススメ!

– 第8章は、筆がすべっている!

• クラスとオブジェクトとモジュールの難しい関係

– メタプログラミングRubyを読んで

• →Rubyを理解する上で重要なところだったのか!

Object Module

ClassMyClass

Obj1

Obj2

Obj3

super class

super class

super class

class

class

class

class

classclass

class

ActiveRecord

ActiveRecordで定義したクラスPersonを探す

Object.const_defined?(:Person) #=> false

Object.const_get(:Person) #=> Person

# ここで定義されるObject.const_defined?(:Person) #=> true

うっかりClassを調べると

>> Class.ancestors>> Class.ancestors

=> [Class, ActiveSupport::Dependencies::ClassConstMiss

ing, Module, ActiveSupport::Deprecation::ClassMethods,

ActiveSupport::Dependencies::ModuleConstMissing, Active

Support::CoreExtensions::Module, Object, PP::ObjectMixin

, ActiveSupport::Dependencies::Loadable, InstanceExecMet

hods, Base64::Deprecated, Base64, Kernel]

わかること

• メソッドはどうやって探すの?

• Procとlambdaの違いは?

• では聞くが、クラスとはいったいなんなのだ?

• 自己記述コード

異様に楽しい

副作用

def foo

proc { puts "hello" }

end

foo.call

foo.class #=> Proc

まとめ

• 脱初心者にはフルコース– (不器用なのでそれしかやり方を知らない)

• バーンダウンはドライブする• 逆引き本オススメ• 「リファクタリング:Ruby Ed」

– 言語の使い方がわかる

• 「メタプログラミングRuby」– Rubyである意味がわかる。

• 応用例は30分後!

• 中級は理解する楽しさ

top related