Rubyの履歴

ALGOLの皮をかぶったLisp

1.8はインタプリタ方式だったのが、1.9からJITコンパイル方式に変わった

マニュアル

http://www.ruby-lang.org/ja/man/html/

バージョンの違いについて

なるほどわかりやすい。マイナーバージョンで安定性全然違うのが最近の言語の流行りなだろか

6 :デフォルトの名無しさ:2009/12/05(土) 14:25:32
バージョンに関するよくある質問

 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶ管理の手抜きなので怒ってよい

 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるだがそろそろ 1.8.7 に譲ってくれ

 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

 満を持して登場の 1.9 系列安定板(体は 1.8.6 程度には使えるということになっている)
 体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中

http://pc12.2ch.net/test/read.cgi/tech/1259990485/6


1.8.7は違うらしい


俺も1.8.7は1.9.1すべきだと思ったよ。1.8.6→1.8.7で劇的に変わった感じ。1.8系は1.8.5あたりからpatchlevelが登場してごちゃごちゃしてきた印象。teenyが10未満という制限のための苦肉の策なだけど…。

1.8.7→1.8.8は1.8.6→1.8.7ほど変わらない予感がするから1.9.2あたりが理想だろうか。「1.10」はそのままバージョン文字列比較できなくなるからまずい。

そうなると現在の1.9.1は2.0.1、まだ見ぬ2.0は3.0とか4.0でいいじゃないか。なぜ2.0にこだわるのか俺にもよくわからない

http://d.hatena.ne.jp/rubikitch/20090213/1234471677

インストール

Windowsのインストーラ

http://rubyinstaller.rubyforge.org/wiki/wiki.pl
gemとかも入る

PHP -> Ruby

Rails for PHP Developers
http://railsforphp.com/reference

http://www.marusankakusikaku.jp/archives/2007/06/23-php-perl...

http://arika.org/doc/php-ruby

http://rsthree.com/2006/12/02/ruby-for-php-programmers/

http://aligach.net/diary/20050829.html

その他

スクレイピングライブラリ

gem install hpricot

http://mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricot

privateとprotected

privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、 レシーバー形式では呼び出せないようにするという意味です。

class Foo
def test
print "hello\n"
end
private :test
end

http://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9.html#a5.2e5.20private.a4.c8protected.a4.ce.b0.e3.a4.a4.a4.ac.ca.ac.a4.ab.a4.ea.a4.de.a4.bb.a4.f3


レシーバ?コンテキストのことかな?ようするにprivateは定義内でしか呼び出せないということか。

protectedにするとレシーバーを指定できる。これは同じクラスであれば外からでも呼び出しが可能になることを意味する。

Rubyでは、C++やJavaのprivateと異なり、サブクラスからでもスーパークラスのprivateメソッドを呼ぶことができる。
Rubyにおけるprotectedとprivateの違いは、レシーバが付けられるかどうかであり、サブクラスから呼べるかどうかではない。
privateメソッドにはレシーバを付けられないので、同じクラスの別のインスタンスのprivateメソッドは呼べない。このような場合にprotectedを使用する。

arrayかどうかチェックする


obj.instance_of?(Array)
obj.class == "Array"

レイジーロード

validation.rbにこなのがあった

    # Returns the Errors object that holds all information about attribute error messages.
    def errors
      @errors ||= Errors.new(self)
    end

これはもしや、レイジーロードパターン

irb(main):029:0> class Moge
irb(main):030:1>   @@moge = nil
irb(main):031:1>   def self.get
irb(main):032:2>     @@moge ||= Moge.new
irb(main):033:2>   end
irb(main):034:1> end
=> nil
irb(main):035:0> Moge.get()
=> #<Moge:0x1003a3418>
irb(main):036:0> Moge.get()
=> #<Moge:0x1003a3418>

なるほど、いいね。

文字コード変換


require 'kconv'

str.toeuc
str.tosjis
str.toutf8

http://jp.rubyist.net/magazine/?0009-BundledLibraries

PHPcall_user_func

Object.method(:method_name).call(args)

http://www.ruby-lang.org/ja/man/html/Method.html

ファイルに書き込む

File.open(filename, 'w'){|f|
f.puts hogehoge
}

http://www.namaraii.com/rubytips/?%A5%D5%A5%A1%A5%A4%A5%EB%A...

PHPdate('YmdHis")

Time.new.strftime("%Y%m%d%H%M%S")

置換

rubyは改行コード問わず、\nらしい
str.gsub(/\n+/, "\n")

マッチして配列

ary = str.scan(/ /)

文字コード指定して実行

Shift_JIS: ruby -Ks

new

Klass.new

  • コンストラクタはinitialize

型チェック

obj.kind_of?(type)

inject

合計を求める

[0..10].inject(0){|sum, v|
  sum += v
}

Test::Unit

http://www.ruby-lang.org/ja/man/html/Test_Unit.html

assert_equalsではなく、assert_equal

その他メモ

  • ロックを抜けるのはreturnではなくてnext。returnだとメソッド終了してしまう

http://www.okisoft.co.jp/esc/ruby/tut-06.html


頻出クラス

Hash
http://www.ruby-lang.org/ja/man/html/Hash.html
Enumerable
http://www.ruby-lang.org/ja/man/html/Enumerable.html
Array
http://www.ruby-lang.org/ja/man/html/Array.html