狠狠撸

狠狠撸Share a Scribd company logo
Ruby
中級への道
    @suchi
(Hamamatsu.rb)
           NAGOYARubyKaigi02
                 2011/02/26
suchi
      http://www.suchi.org/

      Ruby Lv: 初心者→中級?
     好きなメソッド: Object#tap
      好きなrubyist: @m_seki
     好きなSNSDメンバ: TaeYeon

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

       好きなもの: 似てるもの
Hamamatsu.rb?




                   3/9 Kickoff
    http://hamamatsu-rb.github.com/
搁耻产测レベル
NGRK01
「好きなメソッ
ドはyieldと書
きたかったんで
  すが」
   http://www.youtube.com/watch?v=o8Y3mHpPAlE 02:35
yield
 は
メソッド
ではなく
 式
初心者から
抜き出るには
いま風なのは
? 遅延評価勉強法(@amachang)
? つまみ食い勉強法
? パラシュート法
  (野口悠紀雄「『超』勉強法」




         http://d.hatena.ne.jp/amachang/20080204/1202104260
が
これまでを
振り返ると
K&R
Effective
C++/STL
ソフトウェア作法
Software Tools
Mach
Programming
Scheme
本日の水木サン
Windows
  API
  MFC
XP
CODE
COMPLETE
身についたのは
   全部
 つまみ食い
 フルコース
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
戦略
? 基本からしっかり
? 重箱の隅ではなく全体感/体系
? 全部読む
–時間がない?→トイレで読む
? (でもドライブする仕組みがあ
  るといい)
Webアプリスーパーサン
たのしいRuby       2007/11/27-04/27                2009/07/01-08/01
                                  プル
Rubyレシピブック
               2008/08/30-10/07 逆引きRails(2回目)       2009/10/22-12/20
268

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
初めてのRuby       2009/03/30-04/16                     2010/05/17-07/07
                                  エディション
                                  メタプログラミング
逆引きRails       2009/05/08-06/22                     2010/09/07-11/20
                                  Ruby
アクティヴィティ
? 表紙から索引、後付まで全部読む
? レシピ本を全部読む
? 逆引き本を最初から読む ← オススメ!
  – 中身忘れてもインデックスができる
? バーンダウンチャートでドライブ! ←オススメ!
? 社内Wikiに載せる
? トイレで読む
バーンダウン
 チャート
トラウマ
計るもの
? 残ページ数
? ユニット数
 – レシピ番号
 – 逆引き番号
? 10日毎に予測線←オススメ!
? あまり関係ない
 – 消化ページ数
 – 平均進捗/ここ10日の進捗
消化ユニット




    残ユニット
1/1の予测ライン




        1/10の予测ライン
脱初心者向け
面白かった本
名古屋Ruby会議02 LT:Ruby中級への道
はじめに
(Martin Fowler)
Q.オリジナルを持っ
ているのにこの本も
   必要なのか?
たぶん
いらないだろう
ゲーテ
例: タイプコードの除去
? ふるまいをタイプコード(switch文等)で
  切り替えているコード
? オブジェクト指向(ポリモーフィズム)を理
  解していない場合が多い
? 重傷な場合は、クラスのタイプIDを取得
  してswitch文で振り分けていたり
本家リファクタリ
   ング
a.クラスによるタイプコードの
  置き換え
b.サブクラスによるタイプコー
  ドの置き換え
c.State/Strategyによるタ
  イプコードの置き換え
Ruby
エディション
a.クラスによるタイプコードの
  置き換え
b.タイプコードからモジュール
  のextendへ
c.State/Strategyによるタ
  イプコードの置き換え
名古屋Ruby会議02 LT:Ruby中級への道
他にも
? モジュールの抽出
? テンプレートメソッドの作成
–モジュール版
? クラスアノテーションの導入
? 名前付き引数の導入
名古屋Ruby会議02 LT:Ruby中級への道
メタプログラミング
   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を理解する上で重要なところだったのか!
super class

                  Object                 Module

                           class
                                                  class

Obj1           super class           super class
       class

Obj2   class     MyClass                  Class
                             class
       class
                                             class
Obj3
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分後!
? 中級は理解する楽しさ

More Related Content

名古屋Ruby会議02 LT:Ruby中級への道