はじめに
Rubyの勉強を始めましたので、勉強した内容をまとめていきたいと思います。
勉強時のRubyのバージョンはruby2.5.0です。
式展開
文字列の中に式を挿入し、変数などの値を簡単に表現することができます。
文字列内に#{式}
の形で記述します。
ただし、「"(ダブルクォーテーション)」で括った場合のみ、展開され、「'(シングルクォーテーション)」の場合は#もそのまま表示されてしまいます。
以下のように表示されます。
str = "hoge"
puts "str = #{str}" #=> str = hoge
puts 'str = #{str}' #=> str = #{str}
また、式展開では、変数だけでなく配列や直接式を記述できます。
arr = [1, 2, 3]
puts "array = #{arr}" #=> array = [1, 2, 3]
puts "result = #{1 + 1}" #=> result = 2
puts "result = #{1 == 1}" #=> result = true
配列(Array)
配列は[]で記述することができます。
array = [] #=> []
array = [1, 2, 3] #=> [1, 2, 3]
配列に追加する場合は、push
か<<
を使用します。
array.push(4) #=> [1, 2, 3, 4]
array << 5 #=> [1, 2, 3, 4, 5]
初期化には%w
を使用して省略して記述できます。
%w[]
の中にスペースで区切って文字列を記述すると、その区切った要素で初期化されます。
%w[aaa bbb ccc] #=> ["aaa", "bbb", "ccc"]
また、%w
で初期化した場合は、各要素をシングルクォーテーションで区切った扱いとなります。
%W
のようにwを大文字で記述すると各要素をダブルクォーテーションで区切った扱いとなります。そのため、式展開を使用できます。
str = "hoge"
%w[#{str}1 #{str}2] #=> ["\#{str}1", "\#{str}2"]
%W[#{str}1 #{str}2] #=> ["hoge1", "hoge2"]
ハッシュ(Hash)
keyとvalueの組み合わせで表現できます。
初期化は{}
で記述します。
以下のように、{key: value}
の形式で記述した場合は、keyはシンボルの形式になります。そのため、文字列で取得することはできません。
hash = { id: 1, name: "hoge" } #=> {:id=>1, :name=>"hoge"}
hash[:id] #=> 1
hash[:name] #=> "hoge"
hash["id"] #=> nil
文字列等をkeyとする場合は、以下のように{key => value}
で記述します。
hash2 = { 'id' => 2, 'name' => "hoge2" }
hash["id"] #=> 2
hash["name"] #=> "hoge2"
hash[:id] #=> nil
また、keys
やvalues
でkeyとvalueを取得できます。
hash.keys #=> [:id, :name]
hash.values #=> [1, "hoge"]
範囲(Range)
一定の範囲を表すオブジェクトです。
開始値..終了値
で記述します。
また、開始値...終了値
のように、.を3つ記述した場合は終了値を含みません。
数値だけでなく、文字列なども記述することができます。
(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ではないです)
str = "bbb"
if str == "aaa"
puts "hoge1"
elsif str == "bbb"
puts "hoge2"
else
puts "hoge3"
end
# => "hoge2"
他に、ifの逆で、条件を満たさない場合に実行するunless
があります。
str = "bbb"
unless str == "aaa"
puts "hoge1"
else
puts "hoge2"
end
# => "hoge1"
また、条件が1つのみの場合、以下のように後置ifでも記述できます。
str = "aaa"
puts "hoge" if str == "aaa" #=> "hoge"
puts "hoge" if str == "bbb" #=> 実行されない
ループ
ループはeach
で記述できます。
以下の例のstrには配列の各要素が入ります。
%w[a b c].each do |str|
puts str
end
# 実行結果
a
b
c
配列だけでなく、ハッシュやRangeでも使用できます。ハッシュの場合は、keyとvalueの2つの変数を受け取ります。
{id: 1, name: "hoge"}.each do |k, v|
puts "#{k}, #{v}"
end
# 実行結果
id, 1
name, hoge
(1..3).each do |i|
puts i
end
# 実行結果
1
2
3
一定回数繰り返す場合は、times
で記述できます。
3.times do
puts "hoge"
end
# 実行結果
hoge
hoge
hoge
case
case 変数 when 値 end
の形式で記述できます。
変数が複数の値のどれに一致するか判定する時に使用できます。
複数の条件に合致する場合は、最初に合致したwhenに入ります。
str = "bbb"
case str
when "aaa"
puts "hoge1"
when "bbb"
puts "hoge2"
else
puts "hoge3"
end
# => hoge2
また、whenの条件にはRangeで範囲を指定したり、カンマ区切りで複数条件を指定することができます。
num = 2
case num
when 1..3
puts "hoge1"
when 4..6
puts "hoge2"
else
puts "hoge3"
end
# => hoge1
str = "bbb"
case str
when "aaa", "ccc"
puts "hoge1"
when "bbb", "ddd", "eee"
puts "hoge2"
else
puts "hoge3"
end
# => hoge2