第 27 回 Ruby/Rails 勉強会
Ruby 勉強会に参加しました。
関数型言語 Ruby by keisuken さん
Ruby は関数型言語として設計された訳じゃないけど、そこそこ関数型言語っぽく使えるよ (という話かな)
見た目がどうこうじゃなく、関数型言語の考え方とその効果を Ruby でも利用しよう (という話だよね)
発表資料に関数型言語の特徴がコンパクトにまとまっていて、たいへんわかりやすい。
私は今までカリー化がまったく理解できなくて、今回の発表資料を事前に見たときもピンとこなかったんだけど、実際に keisuken さんの説明を聞いて始めて理解できた。
まだ実際に使えるようには、なってないだろうけど。
でもパターンマッチは理解できなかった。
Ruby は変数に型がないオブジェクト指向言語なんだから polymorphism で解決するのがいいんじゃないの?
遅延評価もうれしさがよく解らなかった。今後の課題だ。
日本 Ruby 会議 2008 参加報告 by いまいさん & サイロスさん
今年の Ruby 会議のキーワードは、
- Diversity
- Affordance
- Regional
らしい。
私は Affordance と聞くと胡散臭さを感じてしまう。
Affordance って、結果として afford できてるってだけで、どうすれば afford できるようになるか判らないし、afford できてるかどうか作ってる人には判らないから。
サイロスさん会議期間中は大変だったんですね。お疲れさまです。
初級者向けレッスン by okkez さん & チカホリさん
ポリモルフィズムと言っていたのが非常に気になる。私のようなオジサンは、その昔ポリモフィズムって習ったんだけど。
チカホリさんが萌えな件が Lingr で報告されていた。たいへん気になる。
Ruby の変数には型がないので、継承ってあんまり必要ないんじゃ?
演習問題
#! /usr/local/bin/ruby -Ke # -*- coding: euc-jp -*- # -*- Ruby -*- class Shain def initialize @kihonkyu = 0 end def standup raise NotImplementedError end def kyuryo raise NotImplementedError end attr_accessor :kihonkyu def bonus kyuryo * 4 end end class Tanto <Shain def standup "#{self}が普通に起立しました。" end def kyuryo @kihonkyu end def to_s "担当" end end class Shunin <Shain def standup "#{self}がすばやく立ちました。" end def kyuryo @kihonkyu * 2 end def to_s "主任" end end class Bucho <Shain def standup "#{self}がだるそうに立ちました。" end def kyuryo @kihonkyu * 3 end def to_s "部長" end end class Torishimariyaku <Shain def standup "#{self}はふんぞりかえって立ちました。" end def kyuryo @kihonkyu * 4 end def to_s "取締役" end end if $0 == __FILE__ require 'optparse' classes = open($0){|f|f.readlines}.select{|buf|/^\s*class\s/=~buf}.map{|buf|buf.strip.sub(/class\s(\w+).*/, '\1')}.reject{|c|/Shain/=~c} base = 100 opt = OptionParser.new opt.banner = <<USAGE usage: #{File.basename($0)} [options] <classes> ... classes: #{classes.join(', ')} options: USAGE opt.on('-b basic salary'){|val| base = val.to_i} opt.parse!(ARGV) shain = ARGV.map{|s| Object.const_get(s).new} shain.each do |s| puts s.kihonkyu = base puts s.standup puts "給料は #{s.kyuryo} 円です。" puts "ボーナスは #{s.bonus} 円です。" end end