Ruby まとめ


  ■ リテラル
  [1, 2, 3]  # 配列
  { 1 => 2, 2 => 4, 3 => 6}  # ハッシュ
  { a:"A", b:"B", c:"C" } # 一つ上の例と同じ。キーがシンボルの場合はこのように書ける。
  Fixnum 定数
  ITEM_LIMIT = 500

  actions = %w(item01 item02 item03) # => ['item01', 'item02', 'item03']
  actions = %i(tem01 item02 item03) # => [:item01, :item02, :item03]

  ヒアドキュメント
  print <<EOS      # 識別子 EOS までがリテラルになる
    the string
  EOS

  # method の第二引数には "    ヒアドキュメント\n" が渡される
  method(arg1, <<LABEL, arg2)
      ヒアドキュメント
  LABEL

  
  制御構造
  
  ■ ループ
  break
  next

  ■ 例外処理
  begin
    do_something
  rescue
    recover
  ensure
    must_to_do
  end
  
  
  ■ 文字列
  "Hello, #{user.name}!"  # 式展開

  ■ 日付処理
  http://books.google.co.jp/books?id=tCgYmI6ko_sC&pg=PA1&lpg=PA1&dq=ruby+%E3%82%A4%E3%83%87%E3%82%A3%E3%82%AA%E3%83%A0&source=bl&ots=S8rMuwTGcW&sig=oL5sLNoBmwtievMS0sAdpkTR5EA&hl=ja&sa=X&ei=0IQOVOSZB9G68gX5zYDYCg&ved=0CE0Q6AEwBjgK#v=onepage&q=ruby%20%E3%82%A4%E3%83%87%E3%82%A3%E3%82%AA%E3%83%A0&f=false

  ■ nil チェック
  b ||= a (nilチェック & 初期化)
  nil が帰る可能性がある場合は"!!"でbooleanに変換してチェック
  "?"で終わるメソッドはtru,false が帰ってくる。

  
  クラス

  現在のメソッドがオーバーライドしているメソッドを呼び出す。
  super(arg)

  ■ アクセス
  attr_reader, attr_writer, attr_accessor

  ■ Mix-in モジュール
  ダックタイピングの実装方法
  enumerable

  ■ ライブラリ、モジュール
  サーチパスの確認方法、追加
  File.expand_path('相対パス', FILE)
  require
  include, extend

  
  ■ collection
  キーの存在チェック
  has_key?  # ハッシュのキー
  include?  # 配列の値
  (ハッシュのキーも配列の値も include? でチェックできる)

  numbers = [1, 2, 3]
  numbers_with_zero_and_100 = [0, *numbers, 100]
  numbers_with_zero_and_100 = [0] + numbers + [100] # => [0, 1, 2, 3, 100]

  ■ Enumerable モジュール
  collect (map)
  inject (reduce)

  empty?, sample, max_by(min_by)
  find, inject, select, count, any?, compact,

  map(&:method) の説明
  1, Proc オブジェクトをひきすうに渡す。&をつける。
  2, Symbol#to_proc でシンボルと同名のメソッドを呼び出す。
  http://qa.atmarkit.co.jp/q/35

  
  ■ block, proc, lambda
  lambdaメソッドでブロックをProcオブジェクトに変換できる。

  
  ■ 例外
  def process_user(user)
  begin
  send_to_mail(user)
  rescue
  # 例外処理
  end
  end

  def process_user(user)
  send_to_mail(user)
  rescue
  # 例外処理
  end

  Exception を指定しない。
  rescue Exception => e
  デフォルトのStandardError を使う。
  rescue => e (指定しなければ、StandardError)

  
  ■ tap
  def build_user
  user = User.new
  user.email = "hoge@hoge.com"
  user.name = "Taro Yamada"
  user
  end
  def build_user
  User.new.tap do |user|
  user.email = "hoge@hoge.com"
  user.name = "Taro Yamada"
  end
  end

  
  ■ クラスのイディオム
  継承された時のことを考えて、自分のインスタンスを返す記述は、以下のように。
  obj = self.new # selfを使う
  参考 http://www7.atwiki.jp/mierka/pages/28.html

  未実装で、継承後に実装してほしい場合は
  raise NotImplementedError
  参考 http://r7kamura.hatenablog.com/entry/2014/01/22/223346

  
  ■ 黒魔術
  http://d.hatena.ne.jp/tbpg/20130613/1371143345


  メソッド表記

  class#method [インスタンスメソッド)
  class::method (クラスメソッド)

  a &= yyy
  「&」メソッドの自己代入演算子。