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


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

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


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

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

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

🤔 外部コマンドを実行する

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

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

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

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

class Hoge
attr_accessor :read_write #<=読み書き
attr_reader :read_only #<= 読み込みのみ
attr_writer :write_only #<= 書き込みのみ
end

🐹 モジュールのincludeとextend

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

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

モジュールのincludeでは次のような感じ。

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では次のようになります。

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!"の順に表示

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



  1. include => モジュールのメソッドがincludeしたクラスのインスタンスメソッドになる

  2. extend => モジュールのメソッドがextendしたクラスのクラスメソッドになる


😀 Regexp - パターンマッチ

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

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

😎 所感

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

📚 おすすめの書籍