Rubyの勉強まとめ

# はじめに
Rubyの勉強を始めましたので、勉強した内容をまとめていきたいと思います。
勉強時のRubyのバージョンはruby2.5.0です。

# 式展開
文字列の中に式を挿入し、変数などの値を簡単に表現することができます。
文字列内に`#{式}`の形で記述します。
ただし、「"(ダブルクォーテーション)」で括った場合のみ、展開され、「'(シングルクォーテーション)」の場合は#もそのまま表示されてしまいます。
以下のように表示されます。

```rb
str = "hoge"
puts "str = #{str}" #=> str = hoge
puts 'str = #{str}' #=> str = #{str}
```
また、式展開では、変数だけでなく配列や直接式を記述できます。

```rb
arr = [1, 2, 3]
puts "array = #{arr}" #=> array = [1, 2, 3]
puts "result = #{1 + 1}" #=> result = 2
puts "result = #{1 == 1}" #=> result = true
```

# 配列(Array)
配列は[]で記述することができます。

```rb
array = [] #=> []
array = [1, 2, 3] #=> [1, 2, 3]
```
配列に追加する場合は、`push`か`<<`を使用します。

```rb
array.push(4) #=> [1, 2, 3, 4]
array << 5 #=> [1, 2, 3, 4, 5]
```
初期化には`%w`を使用して省略して記述できます。
`%w[]`の中にスペースで区切って文字列を記述すると、その区切った要素で初期化されます。

```rb
%w[aaa bbb ccc] #=> ["aaa", "bbb", "ccc"]
```
また、`%w`で初期化した場合は、各要素をシングルクォーテーションで区切った扱いとなります。
`%W`のようにwを大文字で記述すると各要素をダブルクォーテーションで区切った扱いとなります。そのため、式展開を使用できます。

```rb
str = "hoge"
%w[#{str}1 #{str}2] #=> ["\#{str}1", "\#{str}2"]
%W[#{str}1 #{str}2] #=> ["hoge1", "hoge2"]
```

# ハッシュ(Hash)
keyとvalueの組み合わせで表現できます。
初期化は`{}`で記述します。
以下のように、`{key: value}`の形式で記述した場合は、keyはシンボルの形式になります。そのため、文字列で取得することはできません。

```rb
hash = { id: 1, name: "hoge" } #=> {:id=>1, :name=>"hoge"}
hash[:id] #=> 1
hash[:name] #=> "hoge"
hash["id"] #=> nil
```
文字列等をkeyとする場合は、以下のように`{key => value}`で記述します。

```rb
hash2 = { 'id' => 2, 'name' => "hoge2" }
hash["id"] #=> 2
hash["name"] #=> "hoge2"
hash[:id] #=> nil
```
また、`keys`や`values`でkeyとvalueを取得できます。

```rb
hash.keys #=> [:id, :name]
hash.values #=> [1, "hoge"]
```

# 範囲(Range)
一定の範囲を表すオブジェクトです。
`開始値..終了値`で記述します。
また、`開始値...終了値`のように、.を3つ記述した場合は終了値を含みません。
数値だけでなく、文字列なども記述することができます。

```rb
(1..3).to_a #=> [1, 2, 3]
(1...3).to_a #=> [1, 2]
("a".."e").to_a #=> ["a", "b", "c", "d", "e"]
# to_aはオブジェクトを配列(Array)に変換するメソッド
```

# 条件分岐
条件分岐は、`if〜end`で記述します。
2つ目以降の条件は`elsif`で記述します。（else ifではないです)

```rb
str = "bbb"
if str == "aaa"
  puts "hoge1"
elsif str == "bbb"
  puts "hoge2"
else
  puts "hoge3"
end
#=> "hoge2"
```
他に、ifの逆で、条件を満たさない場合に実行する`unless`があります。

```rb
str = "bbb"
unless str == "aaa"
  puts "hoge1"
else
  puts "hoge2"
end
#=> "hoge1"

```
また、条件が1つのみの場合、以下のように後置ifでも記述できます。

```rb
str = "aaa"
puts "hoge" if str == "aaa" #=> "hoge" 
puts "hoge" if str == "bbb" #=> 実行されない
```

# ループ
ループは`each`で記述できます。
以下の例のstrには配列の各要素が入ります。

```rb
%w[a b c].each do |str|
  puts str
end
#実行結果
a
b
c
```
配列だけでなく、ハッシュやRangeでも使用できます。ハッシュの場合は、keyとvalueの2つの変数を受け取ります。

```rb
{id: 1, name: "hoge"}.each do |k, v|
  puts "#{k}, #{v}"
end  
#実行結果
id, 1
name, hoge
```

```rb
(1..3).each do |i|
  puts i
end  
#実行結果
1
2
3
```
一定回数繰り返す場合は、`times`で記述できます。

```rb
3.times do
  puts "hoge"
end
#実行結果
hoge
hoge
hoge
```

# case
`case 変数 when 値 end`の形式で記述できます。
変数が複数の値のどれに一致するか判定する時に使用できます。
複数の条件に合致する場合は、最初に合致したwhenに入ります。

```rb
str = "bbb"
case str
  when "aaa"
    puts "hoge1"
  when "bbb"
    puts "hoge2"
  else
    puts "hoge3"
end
#=> hoge2
```
また、whenの条件にはRangeで範囲を指定したり、カンマ区切りで複数条件を指定することができます。

```rb
num = 2
case num
  when 1..3
    puts "hoge1"
  when 4..6
    puts "hoge2"
  else
    puts "hoge3"
end
#=> hoge1
```

```rb
str = "bbb"
case str
  when "aaa", "ccc"
    puts "hoge1"
  when "bbb", "ddd", "eee"
    puts "hoge2"
  else
    puts "hoge3"
end
#=> hoge2
```