Ruby on Railsが生成したソースコードを読んでいると、以下のような構文に出くわします。どのように理解すればいいのか分からなかったので、Rubyの文法について調べました。
create_table :books do |t| t.string :title end
上記のような構文をブロック付きメソッドといいます。
do~endで囲まれた範囲をブロックといい、メソッドの引数になります。
引数として渡されたブロックは、yieldによって実行されます。
メソッドの定義を以下のようにします。
def メソッド名 引数 yield ブロック変数 end
呼び出し側は以下のようにします。ブロック内の処理はメソッド定義のyieldある個所で実行されます。
メソッド名 メソッドの引数の変数名 do |ブロック変数| # yieldがある箇所で実行したい処理 end
ブロック内とメソッド内のyieldと行き来するイメージですが、うーん難しい!!
また、変数名に「:books 」という表現がありますが、これはシンボルといいます。
Rubyの内部では、メソッド名などの識別は、名前を表す文字列ではなく、シンボルが使われています。文字列が同一でも、Ruby内部では別々のオブジェクトとして管理されますが、シンボルを使えば同一のオブジェクトとして管理されます。
Rubyではシンボルがよく使われますが、シンボルの方が文字列どうしの比較よりも高速に判定できることや、コードがすっきりして読みやすくなるためのようです。
(シンボルはハッシュのキーとしてもよく使われます。)