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

togetterのまとめはこちら

パーフェクトRuby読書会

「4-2-5 クラスやモジュールを自動的にロードする」まで終えました。

4-2-3 メソッドをオブジェクトに取り込む

モジュールに定義されたメソッドは、extendを使用してオブジェクトに取り込むことができます。

1
2
3
4
5
6
7
8
9
10
module Greetable
  def greet_to(name)
    puts "Hello, #{name}. I'm a #{self.class}"
  end
end

o = Object.new
o.extend Greetable

o.greet_to 'World'

クラスもまたオブジェクトの1つなので、同じくextendすることができます。

1
2
3
4
5
6
7
8
9
10
11
module Greetable
  def greet_to(name)
    puts "Hello, #{name}. I'm a #{self.class}"
  end
end

class Alice
  extend Greetable
end

Alice.greet_to 'World' # "Hello, World."

Moduleに対しても同様です。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!usr/bin/env ruby

module Greetable
  def greet_to(name)
    puts "Hello, #{name}. I'm a #{self.class}"
  end
end

module Alice
  extend Greetable # Moduleに対してextend
end

Alice.greet_to 'World' # "Hello, World."

4-2-4 モジュール関数

サブルーチンとして利用されることを目的としたメソッドはモジュール関数として定義されることがあります。

1
2
3
4
Math.sqrt(4) # => 2.0

include Math
sqrt(4) # => 2.0

複数のモジュール関数を定義する場合は、module_functionを使用します。

1
2
3
4
5
6
7
8
9
10
11
module MyFunctions
  module_function

  def my_first_function
    puts 'first'
  end

  def my_second_function
    puts 'second'
  end
end

また、モジュール関数は「privateなインスタンスメソッドであると同時に、モジュールの特異メソッドでもある」とのことから、privateであることを確かめるため、 以下のコードを検証しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module MyFunction
  def outer_function
    first_function
    second_function
  end

  module_function

  def first_function
    puts 'first'
  end

  def second_function
    puts 'second'
  end
end

o2 = Object.new
o2.extend MyFunction
o2.outer_function
# => first
# second

o2.first_function #  モジュール関数とはprivateなインスタンスメソッドのためエラー

4-2-5 クラスやモジュールを自動的にロードする

毎回必ずロードする必要がないクラスやモジュールは、autoloadを使用して、必要になったタイミングでrequireすることができます。

1
2
3
autoload :MySweets, 'my_library/my_sweeets'

MySweets # ここでrequireされる。

ネストしたクラス・モジュールのautoloadは以下のように記述します。

1
2
3
4
5
module MySweets
  autoload :Cake, 'my_library/my_sweeets/cake'
end

MySweets::Cake # ここでrequireされる。

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

別タブで開く

セッション

今回はなんと発表者が4人(!)もおり会場が大変盛り上がりました。

先週末、3連休でRailsの乗り方を身につけた from @rojiuratechさん

朝から夜までRailsをみっちり教えてくれるというELITES CAMPに3連休を使って参加された経験を発表されました。 TAが付いて丁寧に教えてくれるらしいのですが、これが35,000円で参加できるということに会場が驚きに包まれていました。

Rubyistを誘うScalaの世界 from @Peranikovさん

RubyistをScalaの世界に誘うべく、Rubyの魅力をScalaを使って再現しました。 静的型付け言語ということもありRubyほど簡単に書くことはできませんが、それでもここまで実現できるのはScalaの素晴らしいところだと思っています。

Ruby 2.3.0-preview1 がリリースされたので新機能を試してみた from @kechakoさん

発表元となる記事はこちら

Ruby 2.3.0のプレビュー版が公開されたのをきっかけに、新機能を実際に試してみた結果を発表されました。 最近話題の、文字列リテラルがimmutableになるという機能の他、一通りの新機能がまとめられていました。 Hashの比較演算子なんて何に使うんだろう…

Railsを使って1週間でサイト構築した from @pachirelさん

Rails、Docker、Elastick Beanstalkなどを組み合わせ、1週間ほどでサイトを構築した話をされました。 即興のためスライドは未公開ですが、詳細な技術については後日Qiitaに投稿されるとのことです。

次回予告

次回は12/16(水)開催予定です(いつもの第4水曜日ではありません!)。ご参加お待ちしております。

寄稿者について

松久保 敬人 (@Peranikov)

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

Published: November 28 2015

blog comments powered by Disqus