8/26(水)にNTT-ATさんの会議室にてkawasaki.rb #027を開催しました。
togetterのまとめはこちら
パーフェクトRuby読書会
「4-1-5 メソッドの呼び出し制限」まで終えました。
4-1-3 インスタンス変数へのアクセス
Rubyではattr_accessorを使用することで、インスタンス変数のアクセサを生成することができます。
1
2
3
4
5
6
7
class Ruler
attr_accessor :length
end
ruler = Ruler.new
ruler.length = 30
ruler.length # => 30
上のコードは、次のコードと同義になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
class Ruler
def length=(len)
@length = len
end
def length
@length
end
end
ruler = Ruler.new
ruler.length = 30
ruler.length # => 30
4-1-4 クラスメソッド
Rubyでは、メソッド名の直前に「self.」を付けることでクラスメソッドになります。
1
2
3
4
5
6
7
class Ruler
def self.pair
[new, new]
end
end
Ruler.pair # => [#<Ruler:0x007f8da20c2880>, #<Ruler:0x007f8da20c2858>]
クラスメソッドの中ではクラスがselfとなるので、Ruler.newの呼び出しはレシーバを省略してnewと記述できます。 クラスメソッドの記述は、以下のようにも書けます。
1
2
3
4
5
6
7
8
9
10
11
class Ruler
class << self
def pair
[new, new]
end
def trio
[new, new, new]
end
end
end
「class « self … end」は特異クラスと呼ばれるクラス定義で、この特異クラス定義に記述したメソッドはRulerクラスのクラスメソッドになります。
4-1-5 メソッド呼び出しの制限
Rubyの呼び出し制限には、public、priate、protectedがあり、以下のように定義できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Processor
def process
protected_process
end
protected
def protected_process
private_process
end
private
def private_process
puts "Done!"
end
end
protectedはJavaやC++と意味が異なり、同じクラスに属しているインスタンスのメソッドの中であれば、異なるインスタンスのprotectedなメソッドを呼び出せます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Processor
def process(other)
other.protected_process
end
protected
def protected_process
puts "Called"
end
end
processor = Processor.new
processor.process(Processor.new) # => Called
processor.protected_process # => NoMethodError
ここで、private以降にクラスメソッドを定義したらどんな挙動をするか?という話になりました。
1
2
3
4
5
6
7
8
9
10
11
class Ruler
private
class << self
def pair
[new, new]
end
end
end
Ruler.pair # => [#<Ruler:0x007fecfb822c20>, #<Ruler:0x007fecfb822bf8>]
と、private以降にクラスメソッドを定義してもクラスメソッドは呼び出せます。
今回のiruby notebookは以下のとおりです。
セッション
東京五輪エンブレム for Ruby from @Peranikov
Rubyの画像描画ライブラリであるcairoを使って東京五輪エンブレムを描画したという話をしました。
発表元のQiitaの記事はこちらです。
イカのギアで持ってないのを調べるやつを作った話 from @ryonext
スプラトゥーンで自分が持っていないギアを管理したい、というニーズからRailsでツールを作ったという話をされました。
イカのギアで持ってないのを調べるやつはこちら
持っていないギアにチェックをつけて、下部のCSV出力から、持っていないギアのリストを出力できます。
RubyのC拡張部分をGoにした話 from @kechakoさん
Goの1.5から、Cのshared libraryを生成できるようになったということで、RubyのC拡張をGoで実装し、Rubyから呼び出すというデモをされました。 現在はGoからRubyのコードを呼び出し、Gemの生成時にGoのコードをコンパイルするということを試しているそうです。
ActiveDecorator from @kon_yuさん
RailsでViewに分岐やロジックがあり複雑化していたものを、ActiveDecoratorを導入して改善したという話をされました。 これにより、デザイナーが作成したHTMLモックをRailsに組み込む作業が楽になったということです。
ActiveDecoratorのリポジトリはこちら
次回予告
次回は9/30(水)開催です(いつもの第4水曜日ではありません!)。ご参加お待ちしております。
寄稿者について
松久保 敬人 (@Peranikov)
RailsからiOSから何でもやってる人。お酒を投稿するサイトPuhaar!を運営しています。