20150514 Ruby講義memo

More than 3 years have passed since last update.

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


Block