railsチュートリアル 第４章　titleヘルパー、再び

####titleヘルパー、再び

```rb
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のデータモデルを理解するための重要な基盤
#####配列

```rb
>>  "foo bar     baz".split     # 文字列を3つの要素を持つ配列に分割する
=> ["foo", "bar", "baz"]
```
#####split

```rb
>> "fooxbarxbaz".split('x')
=> ["foo", "bar", "baz"]
```
#####ゼロオリジン
これは、配列の最初の要素のインデックスが0から始まり、2番目は1...と続くことを意味

```rb
>> a = [42, 8, 17]
=> [42, 8, 17]
>> a[0]               # Rubyでは角カッコで配列にアクセスする
=> 42
>> a[1]
=> 8
>> a[2]
=> 17
>> a[-1]              # 配列の添字はマイナスにもなれる!
=> 17
```
```rb
>> a                  # 配列「a」の内容を確認する
=> [42, 8, 17]
>> a.first
=> 42
>> a.second
=> 8
>> a.last
=> 17
>> a.last == a[-1]    # == を使って比較する
=> true
```
#####==

```rb
>> x = a.length       # 配列も文字列と同様lengthメソッドに応答する
=> 3
>> x == 3
=> true
>> x == 1
=> false
>> x != 1
=> true
>> x >= 1
=> true
>> x < 1
=> false
```
#####様々なメソッド

```rb
>> 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]
```
#####破壊的メソッド！

```rb
>> a
=> [42, 8, 17]
>> a.sort!
=> [8, 17, 42]
>> a
=> [8, 17, 42]
```
#####配列に要素追加　push

```rb
>> 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 分ける

```rb
>> a
=> [42, 8, 17, 6, 7, "foo", "bar"]
>> a.join                       # 単純に連結する
=> "4281767foobar"
>> a.join(', ')                 # カンマ+スペースを使って連結する
=> "42, 8, 17, 6, 7, foo, bar"
```
#####range 範囲　to_a 配列に変換

```rb
>> 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番目の表記ではメソッドを呼ぶ際にカッコを追加する必要
######取り出す

```rb
>> a = %w[foo bar baz quux]         # %wを使って文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2]#　範囲を指定して取り出す
=> ["foo", "bar", "baz"]
```

#####範囲の可変

```rb
>> 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]
```
######こんなことができる

```rb
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
```

####演習
1.文字列を分解し、配列にしろ。

```rb
> 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.分解した文字列をまたつなぎ合わせろ。

```rb
>> s = b.join
=> "A man a plan a canal Panama"
```
3.分割、連結のあと回文かどうかを調べる。

```rb
>> s = a.split(" ").join
=> "A man a plan a canal Panama"
>> a == s.downcase
=> false
```
4.配列を作成し、７番目の要素を取り出せ。

```rb
>> ('a'..'z').to_a[6]
=> "g"
```