LoginSignup
2
2

More than 5 years have passed since last update.

20150514 Ruby講義memo

Posted at

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2