第 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 さん & チカホリさん

今回は「Ruby で学ぶオブジェクト指向

ポリモフィズムと言っていたのが非常に気になる。私のようなオジサンは、その昔ポリモフィズムって習ったんだけど。

チカホリさんが萌えな件が 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

オープンソースとビジネスの実際 by かずひこさん

matz さんはスーパーモデルだから真似しようとしても無理。
だから、かずひこさんを真似しよう ...... って、それも無理。
かずひこさんも、かなりのスーパーモデルですよ。

ってか、日本のソフトウェア開発の現場は、もっと低レベルです。