■ リテラル [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 「&」メソッドの自己代入演算子。