####titleヘルパー、再び
module ApplicationHelper
# ページごとの完全なタイトルを返します。 # コメント行
def full_title(page_title = '') # メソッド定義とオプション引数
base_title = "Ruby on Rails Tutorial Sample App" # 変数への代入
if page_title.empty? # 論理値テスト
base_title # 暗黙の戻り値
else
page_title + " | " + base_title # 文字列の結合
end
end
end
コメントをつけてみた。
Webサイトのレイアウトで使うコンパクトなヘルパーメソッドでは、Rubyの様々な要素が投入される。
モジュールは、関連したメソッドをまとめる方法
###他のデータ構造
Railsアプリケーションを書くために重要となる、いくつかのRubyのデータ構造について説明
####配列と範囲演算子
配列(array)は、特定の順序を持つ要素のリスト
配列を理解することは、ハッシュ(4.3.3)やRailsのデータモデルを理解するための重要な基盤
#####配列
>> "foo bar baz".split # 文字列を3つの要素を持つ配列に分割する
=> ["foo", "bar", "baz"]
#####split
>> "fooxbarxbaz".split('x')
=> ["foo", "bar", "baz"]
#####ゼロオリジン
これは、配列の最初の要素のインデックスが0から始まり、2番目は1...と続くことを意味
>> a = [42, 8, 17]
=> [42, 8, 17]
>> a[0] # Rubyでは角カッコで配列にアクセスする
=> 42
>> a[1]
=> 8
>> a[2]
=> 17
>> a[-1] # 配列の添字はマイナスにもなれる!
=> 17
>> a # 配列「a」の内容を確認する
=> [42, 8, 17]
>> a.first
=> 42
>> a.second
=> 8
>> a.last
=> 17
>> a.last == a[-1] # == を使って比較する
=> true
#####==
>> x = a.length # 配列も文字列と同様lengthメソッドに応答する
=> 3
>> x == 3
=> true
>> x == 1
=> false
>> x != 1
=> true
>> x >= 1
=> true
>> x < 1
=> false
#####様々なメソッド
>> a
=> [42, 8, 17]
>> a.empty?
=> false
>> a.include?(42)
=> true
>> a.sort
=> [8, 17, 42]
>> a.reverse
=> [17, 8, 42]
>> a.shuffle
=> [17, 42, 8]
>> a
=> [42, 8, 17]
#####破壊的メソッド!
>> a
=> [42, 8, 17]
>> a.sort!
=> [8, 17, 42]
>> a
=> [8, 17, 42]
#####配列に要素追加 push
>> a.push(6) # 6を配列に追加する
=> [42, 8, 17, 6]
>> a << 7 # 7を配列に追加する
=> [42, 8, 17, 6, 7]
>> a << "foo" << "bar" # 配列に連続して追加する
=> [42, 8, 17, 6, 7, "foo", "bar"]
#####join 繋げる split 分ける
>> a
=> [42, 8, 17, 6, 7, "foo", "bar"]
>> a.join # 単純に連結する
=> "4281767foobar"
>> a.join(', ') # カンマ+スペースを使って連結する
=> "42, 8, 17, 6, 7, foo, bar"
#####range 範囲 to_a 配列に変換
>> 0..9
=> 0..9
>> 0..9.to_a # おっと、9に対してto_aを呼んでしまっていますね
NoMethodError: undefined method `to_a' for 9:Fixnum
>> (0..9).to_a # 丸カッコを使い、範囲オブジェクトに対してto_aを呼びましょう
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0..9 は範囲として有効ですが、上の2番目の表記ではメソッドを呼ぶ際にカッコを追加する必要
######取り出す
>> a = %w[foo bar baz quux] # %wを使って文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2]# 範囲を指定して取り出す
=> ["foo", "bar", "baz"]
#####範囲の可変
>> a = (0..9).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..(a.length-1)] # 明示的に配列の長さを使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..-1] # 添字に-1を使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]
######こんなことができる
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
####演習
1.文字列を分解し、配列にしろ。
> a = "A man, a plan, a canal, Panama"
=> "A man, a plan, a canal, Panama"
>> b = a.split(",")
=> ["A man", " a plan", " a canal", " Panama"]
2.分解した文字列をまたつなぎ合わせろ。
>> s = b.join
=> "A man a plan a canal Panama"
3.分割、連結のあと回文かどうかを調べる。
>> s = a.split(" ").join
=> "A man a plan a canal Panama"
>> a == s.downcase
=> false
4.配列を作成し、7番目の要素を取り出せ。
>> ('a'..'z').to_a[6]
=> "g"