Hamamatsu.rb#4に参加してきました

こんばんは!
私、若干風邪気味ですが、絶賛夜更かし中です。
今日は、月1回第2水曜日に開催されているHamamatsu.rb(浜松Ruby)に参加してきました。

今回で4回目ですが、最初に参加して以来2回、3回と休んでましたので久しぶりの参加でした。
名前と顔が一致しない人がほとんどでしたので、ポジションペーパー見ます。
っというか、自分が書いてなかったので書かなきゃ・・・

今回は、メタプログラミングRuby読書会(第3章ブロック)とRials3道場でした。

メタプログラミングRuby読書会(第3章ブロック)

圧倒的に準備不足&理解不足でした。
参加してるのが申し訳ないくらいで、、、
そんな悲惨な状況でしたが、それでも収穫はありましたのでその一部をまとめておきます。

pの返り値はnil

間違いやハマりは良くないイメージがありますが、個人的にはそういうことこそ共有してもらえると嬉しかったりします。
これはデバッグ時にハマりそうなネタだと思い、参考になりました。

class Hoge
  def hello
    "hello world!"
  end
  def p_hello
    p hello
  end
end
#=> nil
hoge = Hoge.new
hoge.hello
#=> "hello world!"
hoge.p_hello
"hello world!"
#=> nil       <= 何でnilが表示される??

実際のコードはもうちょっと複雑でしたが、ruby1.8系ではpの返り値はnilになる。
1.9系では挙動が違い、"hello world!"の文字列が返ってくるように修正(?)されています。

インスタンス変数の理解不足
class Foo
  def var
    @var = "hello"
  end
end
#=> nil
foo = Foo.new
foo.var
#=> "hello"
class Foo2
  @var = "hello2"
  def var
    @var
  end
end
#=> nil
foo2 = Foo2.new
foo2.var
#=> nil

Fooクラスのインスタンスメソッドvarでは"hello"と表示されます。
Foo2クラスのインスタンスメソッドvarは、"hello2"が表示されずnilが返ります。
これは何故でしょう?

Foo2クラスをロードした際に@var = "hello2"が実行されますが、これはインスタンス生成とは関係ありません。
ですのでnilが返ってくる、、、と?分かったような。分からないような・・・
クラスとオブジェクトとインスタンスの挙動がしっかり分かってないので、第1章をもう1度読み直して出直してきます。
ちなみに、foo2.varで"hello2"を返すようにする(@varを正しく初期化する)場合、コンストラクタにて初期化すればOKです。

class Foo2
  def initialize
    @var = "hello2"
  end
  def var
    @var
  end
end
#=> nil
foo2 = Foo2.new
foo2.var
#=> "hello2"
復習する箇所
  • instance_evalとクリーンルーム
  • P.121の最下部のコードの意味
  • 呼び出し可能オブジェクト(ProcとLambda)
  • クイズを自分で書いて挙動を確認
  • 1章(オブジェクトとモデル)と2章(メソッド)

Rials3道場(ルーティングのお話)

@mackatoさんによる、Ruby on Railsのルーティングのお話。
↓↓↓利用したスライドはこちら↓↓↓
http://www.slideshare.net/mackato/rails3dojo-routing

とても分かりやすい説明で勉強になりました。
特に、namespaceを使っての階層構造の指定(P.35,36)や、Resouce Routingのネスト(P.37,38)は理解が曖昧だったため大きな収穫でした。
また、実演ではHaml、SaSS、RSpec等理解できていない技術が盛りだくさんでしたので、 サンプルコードを見て確認したいと思います。

次回はActiveRecordの予定とのことで、次回も楽しみです。

総評

勉強会ってモチベーションが上がっていいなと思いました。
ただ、自分自身の参加する心構えが出来ていなかったように思うので、次回参加する際は この部分をしっかり考えて参加したいと思います。
いずれにしても、楽しく学ぶをモットーに、、、次回も参加できればと思います。

それでは。

【追記】
勉強会の議事録がアップされましたのでリンクしました。(@jacoyutoriusさん感謝)
hamamatsu.rb#4議事録