一番の下手くそでいよう、とはいうものの・・・・・・

最近、仕事でのちょっとしたテキスト処理やデータをまとめたりする際に、
Rubyを使うようになりました。
以前はPerlを使っていたのですが、Rubyの方が読み易くて書くのも楽。

そこでさらに Ruby についてもっと深く知っていきたいなーなどと思っていたところ、
ATNDの新着RSSにyokohama.rb というイベントを発見。
初心者向けセミナーがあるということで、そちらに参加してきました。

yokohama.rb 第3回
http://atnd.org/events/10272

初心者向けセミナーの内容はオライリーの「初めてのRuby」を読むというもの。
で今回は主に2章の「配列とハッシュ」。

ここでセミナーの内容をちょっと復習。

配列の定義。

a = ["a","ab","abcde"]
=> ["a", "ab", "abcde"]
a = %w(a ab abcde)
=> ["a", "ab", "abcde"]

配列から最大の長さを探す。

a.max {|e1,e2| e1.size <=> e2.size}.size
=> 6
a.map {|e| e.size}.max
=> 6

map を使うと、配列の各要素に対する処理が実行されたあとの配列が帰ってくる。

各配列の要素を右揃えで表示。

 a = ["a","ab","abcedf"]
  l = a.map {|e| e.size}.max
  
  puts "sprintf"
  a.each do |e|
    puts sprintf("%06s",e)
  end
  
  puts "rjust"
 a.each do |e|
   puts e.rjust(l)
 end

yield を使って、Array オブジェクトに myeach を作る。

class Array
 def myeach
    self.length.times do |e|
     yield self[e]
    end
 end
 def myeach2
    i = 0
    while (i < self.length)
     yield self[i]
     i += 1
    end
 end
end

["a","ab","abcdef"].myeach {|e| puts sprintf("%6s",e)}
["a","ab","abcdef"].myeach2 {|e| puts sprintf("%6s",e)}

さらに、Ruby1.9.2 の文字コードの勉強
Ruby1.9 の文字列自体が文字コードを持つ
・ 外部エンコード:読み込むファイルの文字コード
・ 内部エンコード:読み込み後の文字コード

Ruby1.9では、スクリプト自体の文字コード、読み込むファイルの文字コード
書きだすファイルの文字コードを別々にできる。

# -*- coding:utf-8 -*-

#スクリプト自体の文字コードはUTF-8、
#読むこむファイルはEUC-JP、書き出しはUTF-8
File.open("test.txt","r:EUC-JP:Shift_JIS"){|f|
  File.open("out.txt","w:Shift_JIS:Shift_JIS") {|fo|
    fo.puts(f.read)
  }
}

以前、Windowsアプリのログファイルで日本語入りのUnicodeになっているファイルがあり、
これをRuby1.8ではうまく読めない、なんてことを経験したことがありました。
その時はPerlで読み込んでいたのですが、Ruby1.9ならうまくいきそう。


RVM (Ruby Version Manager)は複数のRubyを管理するバージョン管理ツール。

RVM
http://rvm.beginrescueend.com/

このRVMを使って、Macbook AirRuby1.8.7Ruby1.9.2を共存。

$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ rvm use 1.9.2
Using /Users/hayato/.rvm/gems/ruby-1.9.2-p0
$ ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]

#リセット
$ rvm reset
$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

などなど、非常に勉強になりました。


感想:
何と言うか、初心者向けということで行ってみたら、本当の初心者は自分だけだったという。。
職業プログラマではない上、Rubyもあまり書き慣れてないので、
こういうコードを書いて勉強するイベントに参加するには、
もうちょっと普段からRubyのコードを書いておいて方が良いと感じた。
「一番の下手くそでいよう」とはいうものの、さすがに素人すぎるのもまずいなー、と。
勉強用のブログでも作ろうかな。