Ruby勉強し直してみた 1

Railsエンジニアになってはや1年が経とうとしています。そんな中で最近思うのですが「Railsはわかってきたけれども、Rubyが全くわからない…」 これはやべぇと思い、ここで改めてRubyを勉強し直していきます その備忘録

Ruby演算子

ruby演算子には優先度があります

高い  !
    &&
    ||
    not
低い  and or

優先度があることにより、英語の論理演算子と記号の論理演算子を混在させてしまうと、求めたい結果が変わってしまうことがある

a = true
b = false
!a || b
not a || b

↓このように評価される

(!a) || b
not (a || b)

ふむふむ。 また記号の論理演算子と違い、英語の論理演算子同士の場合は優先順位の違いがない。 ()をつかわなければ左から右に順番に評価されていく

a = true
b = true
c = false

# && の方が || より優先順位が高い
a || (b && c)

# and or は優先順位が同じなので左から評価されていく
(a or b) and c

記号と英語の演算子で優先順位に違いがあるため and or を && || の代わりに使おうとすると期待と違う形になるやも

and や or は条件分岐で使うのではなく、制御フローを扱うのに向いている 例えば 「正常なuserであればメールを送信する」という制御フローを実行したければ

user.valid? and send_mail_to user

というように書くことができる

or も「Aが真か? 真でなければBせよ」という制御フローを実現することに向いている

# userが不正だったらエラーメッセージを返す
user.valid? or return 'userが不正です'

三項演算子

n = 11
if n > 10
  '10より大きい'
else
  '10以下'
end
=> "10より大きい"

こんな風にかける

n = 11
n > 10 ? '10より大きい' : '10以下'
=> "10より大きい"

シンプルなif/else文であればこの書き方のほうがスッキリと書くことができる

改めてRuby勉強するとおもしろい…!