酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Rubyの制御構文、クラスとモジュール、組み込みクラス【パーフェクトRuby】

完全に時代に取り残されつつ、『パーフェクト Ruby』を読んでいます。

この記事では、「3章の制御構造、4章のクラスとモジュール、5章の組み込みクラス」を読んでいる中で、忘れたくない部分を中心に備忘録メモしました!


rescueで同じ例外を再発させる

以下のコードでは、resuce内でエラーを再発できるそう。

1
2
3
4
5
6
begin
    raise StandardError, 'this'
rescue => e
    logger.error e.message + hogehoge
    raise #<= 補足した例外を再発
end

外部コマンドを実行する

こちらは次のまとめがわかりやすいのでおすすめ。

http://qiita.com/tyabe/items/56c9fa81ca89088c5627

インスタンス変数へのアクセス

以下のコードはClassのインスタンス変数へのアクセサを定義してくれます。

1
2
3
4
5
class Hoge
    attr_accessor :read_write <=読み書き
    attr_reader :read_only #<= 読み込みのみ
    attr_writer :write_only #<= 書き込みのみ
end

moduleのincludeとextend

これまで覚えられずに何度もトライしている部分です。今回は書籍とブログ『Rubyのmoduleをmix-inする際のincludeとextendの違いをシンプルな例で理解する - memo.yomukaku.net』を拝見しつつ、コードを書いてみました!

http://memo.yomukaku.net/entries/319

moduleのincludeでは次のような感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module ModuleA
  def self.class_method_a
    puts 'output form class_method_a'
  end

  def method_a
    puts 'output from method_a'
  end
end

class Sample
    include ModuleA

    def method_a
        super
        puts "Can overwrite!"
    end
end

Sample.class_method_a #=> NoMethodError
Sample.new.method_a #=> "output from method_a", "Can overwite!"の順に表示
Sample.method_a #=> output from method_a

一方でextendでは次のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module ModuleA
  def self.class_method_a
    puts 'output form class_method_a'
  end

  def method_a
    puts 'output from method_a'
  end
end

class Sample
    extend ModuleA

    def self.method_a
        super
        puts "Can overwrite!"
    end
end

Sample.class_method_a #=> NoMethodError
Sample.new.method_a #=> NoMethodError
Sample.method_a #=> "output from method_a", "Can overwite!"の順に表示

ということでまとめです。

<ol>
    <li>include => モジュールのメソッドがincludeしたクラスのインスタンスメソッドになる</li>
    <li>extend => モジュールのメソッドがextendしたクラスのクラスメソッドになる</li>
</ol>

Regexp - パターンマッチ

恥ずかしながらRegex#===を知りませんでした。これはかなり便利!

1
2
3
# 0-9の数字を含めばtrueを返す
/[0-9]/ === 'ruby' #=> false 
/[0-9]/ === 'ruby5' #=> true

所感

パーフェクト Ruby』が、Amazon書籍・プログラミング部門のベストセラーで25位。。。僕と同じく取り残された人が年末年始読んでるっぽいw

おすすめの書籍