読者です 読者をやめる 読者になる 読者になる

Java vs Rubyの言語比較記事へのつっこみをお勉強

↓の記事の内容に誤りが多く含まれているので、
http://japan.internet.com/column/developer/20080408/26.html

各地でつっこみが行われています。
http://d.hatena.ne.jp/rubikitch/20080409/1207735420
http://talototo.blog48.fc2.com/blog-entry-271.html

というわけでRuby側の間違い項目を修正してみよう。ドキドキ・・。
元記事のコードはこんな感じ。

module Catalog
  PI=3.1419
  @journal

  def setJournal(journal)
    @journal=journal
  end
end
require Catalog
class CatalogEntry
  include Catalog
end

・・なんかまあ色々謎な点がありますが、出来る限り原型をとどめたまま修正するとするなら、、

# catalog.rb
module Catalog
  PI = 3.1419
  attr_writer :journal
end
# catalog_entry.rb
require 'catalog'

class CatalogEntry
  include Catalog
  def hoge
    puts PI
    puts @journal
  end
end

c = CatalogEntry.new
c.journal = "kenmaz"
c.hoge
#=>3.1419
#=>"kenmaz"

ということでOK?

モジュールとクラスが同じファイルに書かれていればそもそもrequireは不要なのだが、元記事筆者はJavaの習慣からそれぞれを別ファイルで定義して、さらに*.rbファイル名ではなくモジュール名をrequireしてしまった点が問題ということかな。あとは、@journalがモジュールオブジェクトのインスタンス変数として定義されてしまっているところとか(たしかにこれはJavaに慣れているとちょっと戸惑う)、瑣末だけどメソッド名はsetJournalよりもset_journal、というかアクセサーつかうべき、とか。そんなところでしょうか>Ruby識者の方々

ブログはともかく、Web記事執筆ってのは突っ込みの即時性が高いので恐ろしい。