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