ことはじめ

実験したり勉強したり。

Rubyことはじめ4

今日も今日とてパーフェクトRubyをやる

今日は第3章。覚えること多めなのですぐ入ってこないのは飛ばしてやった。

第3章

演算子

::の優先順位が一番高い

同値

  • ==演算子はほとんどのクラスで同値性を判断するメソッドとして定義されている
  • 同一インスタンスかどうかみたい場合はequal?メソッドを用いる
a = [1,2,3]
b = [1,2,3]

p a == b            # => true
p a.equal?(b)    # => false

unlessはifと同じ動きをする

n = 1

unless n.zero?
  p "nは0じゃない"
else
  p "0や"
end

=> "nは0じゃない"

後置if/unless

  • ifやenlessは最後に評価された値を返す
  • この戻り値を代入やメソッド呼び出しの引数として利用できる。
p '先に書くのか' if n == 1                  # => '先に書くのか'
p '先に書くのか2' unless n.zero?     # => '先に書くのか2'

パーセント記法

  • %はダブルクォートと同等
  • %qはシングルクォートと同等
  • %wは配列 式の展開はされない
  • %Wは配列 式の展開がされる
  • %i要素がシンボルの配列を作る

繰り返し

languages = %w(Perl Python Ruby)
i = 0

while i < languages.length
  p "Hello #{languages[i]}"
  i+=1
end

=> "Hello Perl"
=> "Hello Python"
=> "Hello Ruby"

例外処理

  • Exceptionを継承したクラスはたくさんあるのです・

Safe navigation operator (v.2.3以降)

  • ある値がnilでなければメソッドを呼び出したい的な
  • &.を用いる
people = %w(hoge hage huge)

person_0 = people[0]
person_9 = people[9]

p person_0&.capitalize   # => hoge
p person_9&.capitalize   # => nil

仮引数は省略可能

def hoge(text = 'Hi')
  p text
end

hoge
hoge('Yo')

ブロック

微妙な理解度

def block_sample
  p 'stand up'

  yield if block_given?

  p 'sit down'
end

# ブロックを渡さない場合
block_sample

# => "stand up"
# => "sid down"  

# ブロックを渡す
block_sample do
  p 'work'
end


# => "stand up"
# => "work"
# => "sid down"  

感想

文化多すぎ、書き方多すぎ。 代表的な書き方を実戦で描いていかないと覚えらんないなあ。