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!を運営しています。