ruby association silver,gold 対策本は赤い本しかない、
あとはネットでみてみよう。
条件判断
奇数、偶数
p 3.even?
p 3.odd?
p 3.methods.grep /\?/
論理演算
p 3 || 5
p nil || 5
a ||= 3
a = a || 3
# true,falseのみ返したい場合の使われる書き方
!!(a || 3)
unless の際も else は使えるが、紛らわしいため、非推奨。
case はobjectのクラスでも確認できる。
それは === 演算子を使用しているため。
unless は後置方式で使うことが多い。
eql? と equal? の違い。
繰り返し
1行で処理をかける場合のみ{}推奨。
map などで戻り値をさらに使いたい場合は複数行でも{}使う。
method
ブロックつきメソッド呼び出しが便利さのひとつ
シンタックスシュガー
class.method はクラスメソッドで
class::TEISUU
module::method はモジュールのメソッドが多いかも
method definition
キーワード引数をどんどん使いたい。
もう1.X系は使わないよね
def foo(x:0,y:0, **args)
p [x,y,args]
end
foo(y:35,x:22,z:3)
foo(z:24,y:35,x:22)
# ハッシュからキーワード引数にもっていける
h = {y:2, x:5, z:9}
foo(h)
オブジェクト思考
p 1.instance_of?(Fixnum)
class
クラスメソッド 特異メソッド
class CC
def self.hello(name)
puts "test"
end
end
クラス変数はあまり使わないほうがいい。
public, private, prtected が結構違うため確認してほしい。
Open Class
class RingArray < Array
def [](i)
idx = i % size
super(idx)
end
end
wday = RingArray.new(["a","b",'c','d'])
p wday[-1]
p RingArray.ancestors
undef
class << Time
undef :now
end
p Time.now # no method error
特異クラス
特異メソッド
Module
include インスタンスメソッドとして追加
includeが複数あったら?
prepend
extend クラスメソッドとして追加
<=> UFO演算子
Object oriented
object自身が自分が何ができるか知ってたほうがよい
デザインパターン
http://qiita.com/kidach1/items/4b63de9ad5a97726c50c#1-3
GoF
演算子
範囲演算子
p ("a".."aa").to_a
p 3.succ
p -2.succ
p "z".succ
not, or, and は = より優先順位が低いため怖い
演算子を定義する
単項演算子は +@ -@ ~@ !@
例外
rescue 内での raise は補足した例外をそのまま投げる
def ee1
File.open("/no/file") # raise err
end
def ee2
ee1
end
ee2 rescue puts "1liner"
begin
ee2
rescue => ex
puts ex.message, ex.class, ex.backtrace
ensure
puts "tets"
end