9/30(水)にNTT-ATさんの会議室にてkawasaki.rb #028を開催しました。

togetterのまとめはこちら

パーフェクトRuby読書会

「4-1-8 特異メソッド」まで終えました。

4-1-6 クラスの継承

Rubyは単一継承をサポートしており、クラスを定義するときに1つだけスーパークラスを継承できます。

1
2
3
4
5
6
7
8
9
10
11
12
class Parent
  def greet
    puts 'Hi'
  end
end

class Chile
end

Child.superclass # => Parent
child = Child.new
child.greet # => "Hi" と表示

サブクラスはスーパークラスのインスタンスメソッド、クラスメソッドを継承します。しかし、サブクラスはインスタンス変数についての情報は継承しません。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Parent
  def initialize
    @var = 'content'
  end
end

class Chlid < Parent
  def initialize
  end
end

p Parent.new # => #<Parent:0x007f80940a04f8 @var="content">
p Child.new # => #<Child:0x007f80940987f8 @var="content">

また、定数も引き継ぎます。

1
2
3
4
5
6
7
8
9
class Parent
  PARENT = 'parent\'s constant'
end

class Child < Parent
end

p Child.constants # => [:PARENT]
Child::PARENT # => "parent's constant"

余談で、Rubyでは定数の再定義はエラーとならず警告が出るだけという話をしました。

1
2
3
4
5
FOO = "foo"
FOO = "bar"

# (pry):81: warning: already initialized constant FOO
# (pry):80: warning: previous definition of FOO was here

4-1-7 メソッドのオーバーライド

Rubyはメソッドのオーバーライドをサポートしています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Parent
  def greet
    puts 'Hi'
  end
end

class Child < Parent
  def greet(name)
    puts "Hi #{name}"
  end
end

parent = Parent.new
p parent.greet # => "Hi"
child = Child.new
p child.greet('ruby') # => "Hi ruby"
p child.greet # => ArgumentError: wrong number of arguments (0 for 1)

スーパークラスのメソッドを呼び出すにはsuperを使います。スーパークラスのメソッドにはサブクラスで受け取った引数が自動的に渡されます

1
2
3
4
5
6
7
8
9
10
11
class GrandChild < Child
  def greet(name)
    super

    puts "Nice to meet you!"
  end
end

grandchild = GrandChild.new
grandchild.greet 'ruby' # => Hi ruby
# => Nice to meet you!

4-1-8 特異メソッド

オブジェクトは、クラスに定義されたメソッドの他に、そのオブジェクト固有のメソッドを持つことができます。これを特異メソッドと呼びます。

1
2
3
4
5
6
7
8
9
10
11
12
class Foo
end

foo = Foo.new
bar = Foo.new

def bar.singleton_method
  puts 'Called!'
end

bar.singleton_method # => Called!
foo.singleton_method # => undefined method `singleton_method'

なお、特異メソッドという名称についてはこちらにまとめてあります。

今回のiruby notebookは以下のとおりです。

別タブで開く

セッション

野球Hack!~Pythonを用いたデータ分析と可視化 from @shinyorkeさん

PyCon JPで発表する練習として、Pythonを用いて野球のデータ分析(発表者は「野球Hack」と命名)について発表されました。 Pythonの魅力と好きな言語でHackすること、データから見えてくる言葉の楽しさを伝えていただきました。

今回俺がいかにして転職したか晒す from @Peranikovさん

今月は特に技術的なエントリーを何も書いていなかったので、今回転職した時のノウハウについて発表しました。 おそらくKawasaki.rbで転職について発表したのはこれが初めてでしょう。

発表元の記事はこちら

今回のブログを書いてくださった方々

野球Hack!~Pythonを用いたデータ分析と可視化(素振り) - #kwskrb #28 に参加しました

次回予告

次回は10/25(毎月第4水曜日)開催予定です。ご参加お待ちしております。

寄稿者について

松久保 敬人 (@Peranikov)

RailsからiOSから何でもやってる人だったが、今はDDDとScalaの人。 お酒を投稿するサイトPuhaar!を運営しています。

Published: October 03 2015

blog comments powered by Disqus