#「動くからいいや」ではなく「可読性」「メンテナンスのしやすさ」が大事
Railsに頼り過ぎていて今までRubyの基本的な文法すら満足に扱っていなかったのだなと痛感させられました。
知っている人からすれば当たり前かもしれませんが、温かい目で見守ってください!
また、もっとこうした方がより実践的だという意見があればコメントで教えていただけると嬉しいです。
##埋め込みRuby
文字列の中にRubyの式や変数を埋め込める。
name = "太郎"
puts "こんにちわ!私は#{name}です!"
=> "こんにちわ!私は太郎です!"
ダブルクォーテーション("")じゃないとRubyが展開されないので注意です。
##後置if
例えば以下のようなfalse側がいらないif文がある時
if true
"trueでhoge"
end
=> "trueでhoge"
こういう時は以下のように一行で書くことができます
hoge = "trueでhoge" if true
puts hoge
=> "trueでhoge"
##三項演算子
例えば以下のような普通のif文があるとき、
if true
puts("trueでhoge")
else
puts("falseでhuga")
end
このような if~else~end で終わるようなif文であれば一行で以下のように書くことができます。
true ? puts("trueでhoge") : puts("falseでhuga")
##配列に入れ込む
n = []
5.times { n.push gets.to_i }
puts n.min
上記の例だと配列に数字を5回いれ、最小の値を取り出すことができます。
##%配列(Array)記法
%w(小文字) 配列を作る。配列の要素はスペース区切りで指定する。式の展開はされない。
%W(大文字) 配列を作る。%w()と違い、式が展開がされる。
%wを使った例。
a=["a","b","c"]
b=%w(a b c)
puts a
puts b
=> ["a", "b", "c"]
=> ["a", "b", "c"]
%Wを使った例。
rails='Ruby'
react='JavaScript'
array=%W(#{rails} #{react} PHP)
puts array
=> ["Ruby", "JavaScript", "PHP"]
##{}
ブロックは do~end で書くことが多いかもしれませんが {} を使って一行で書く時に読みやすくすることができる。
%w(dog cat monkey).each do |animal|
puts animal
end
↓↓↓
%w(dog cat monkey).each{ |animal| puts animal }
この二つはどちらも同じ結果を返します。
do が 「 { 」に、 end が「 } 」 に置き換わっただけです。
ブロックの中身が短く単純な時に便利です。
[1, 2, 3, 4].select { |item| item % 2 == 0 }
=> [2, 4]
上記のように select や any? など配列、ハッシュを扱うメソッドを使う時によく見られます
##多重代入
foo, bar = [1, 2] # foo = 1; bar = 2
foo, bar = 1, 2 # foo = 1; bar = 2
foo, bar = 1 # foo = 1; bar = nil
foo, bar, baz = 1, 2 # foo = 1; bar = 2; baz = nil
foo, bar = 1, 2, 3 # foo = 1; bar = 2
foo = 1, 2, 3 # foo = [1, 2, 3]
*foo = 1, 2, 3 # foo = [1, 2, 3]
foo,*bar = 1, 2, 3 # foo = 1; bar = [2, 3]
#右辺が , 区切りで複数ある場合には配列に変換される
a=1,2,3,4
#左辺も , 区切りで複数ある場合には配列に変換された上で、左辺の各変数に右辺の各要素が代入される
b,c="apple","banana"
puts a
puts b
puts c
=> [1, 2, 3, 4]
=> "apple"
=> "banana"
##~map(&:to_i)
a = ["1", "2", "3"].map(&:to_i)
puts a
=> [1, 2, 3]
mapメソッドはブロック付きメソッド。
ブロック付きメソッドの引数には、ブロックを渡す必要があるが
to_procメソッドを持つオブジェクト(この場合だとto_i)の前に、&をつけることでmapメソッドの引数としても渡すことができる。
##最後に
まだまだpaizaを学習中なので新しいことを学んだら随時追加していきます!