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


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

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


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

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

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

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

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

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

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

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

class Hoge
attr_accessor :read_write #<=読み書き< span>
attr_reader :read_only #<= 読み込みのみ< span>
attr_writer :write_only #<= 書き込みのみ< span>
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

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍