tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

「初めての Ruby」 一人勉強会 1日目

なんとなく、「Ruby を勉強しようかな」と思いました。

教材はコレ↓
初めてのRuby

ざっと読んでる限り、かなりいい本です。
これを読みつつ、つぶやいてみます。

以下、つぶやきメモ。

※1 今のところ、正直あまり Ruby は好きではありません。
※2 オイラがまともにそこそこ書ける言語は C#, Java(5.0より前), Perl です。言語の機能を語っているときはその辺との比較になっているはず
※3 Ruby はまだまったく理解していないので、的外れでトンチンカンな批判してるかも

文字列の比較について(p3. 例1-1)
% irb
irb(main):001:0> str1="string"
=> "string"
irb(main):002:0> str2="string"
=> "string"
irb(main):005:0> str1==str2
=> true
irb(main):006:0> str1.equal?(str2)
=> false

敢えて Java と逆かよorz。

変数はリファレンスだから、ポインタ値を比較するのが '==' で、「オーバーロード可能なメソッド」である 'Equals()' で中身を比較する、というのが Java の仕様。
こっちのほうが妥当だと思うんだけどなぁ...

文字列の連結について(p3. 例1-1)
irb(main):011:0> str="lilliput"
=> "lilliput"
irb(main):012:0> str.length
=> 8
irb(main):013:0> str << "ian"
=> "lilliputian"
irb(main):014:0> str.length
=> 11

PerlJava演算子を変えて、しかも C++ プログラマをびっくりさせるような演算子を使うことないと思うんだけどなぁ...

配列/ハッシュ変数について(p.23 例1-18)
array = ["Bear", "Benford", "Egan"]
hash = {
  "Baxter" => "Stephen", "Stross" => "Charles", "Reynolds" => "Alastaier"
}

Perl の「配列リファレンス」を「配列」の構文に当ててるのかよorz
Perl の「ハッシュリファレンスの構文」を「ハッシュの構文」に当てるのかよ orz

あれ?でも Ruby の変数って基本的にリファレンスなんだっけ?だったらこれでいいのか。

Ruby/Tk(p24-25 例1-20)

Ruby/Tk のサンプルだけど、FreeBSD だと Ruby/Tk が入ってなかった。(Ruby は portupgrade とかを入れるときに勝手に入る)

Ruby/Tk を使うには
x11-toolkits/ruby-tk
を入れる。つーか分かりにくい...(これは ports に対する愚痴)

変数の多重代入(p25 例1-21)
irb(main):005:0> a, b="str", "str"
=> ["str", "str"]

こんな多重代入できるのか...。自重しないとお行儀の悪いコードが簡単に書けそうだなぁ。Perl みたいに括弧を強制すればもうちょいマシなのだけど。

特異メソッド(p.27 例1-23)

特異メソッド面白い。
特定のインスタンスだけに紐付くようなメソッドをつくれるらしい。

irb(main):001:0> a, b="str", "str"
=> ["str", "str"]
irb(main):002:0> def a.greet
irb(main):003:1> puts "I am the object #{self.object_id}"
irb(main):004:1> end
=> nil
irb(main):005:0> a.greet
I am the object 337810090
=> nil
irb(main):006:0> b.greet
NoMethodError: undefined method `greet' for "str":String
        from (irb):6
        from :0

...面白いけど、オイラの実力では真っ当な使い道が思い付かないよ...
(これは自分に対する愚痴)

再び文字列の連結について(p.27 例1-24)
irb(main):010:0> "str" + "ing"
=> "string"

なぁんだ。'+' 演算子で文字列結合できるじゃねーか。前言撤回。Perl より分かりやすいし、良いと思います。
じゃあ '<<' 演算子は「いらない子」ということでいいのかな?

と、いうことで第1章終了。

第2章へ続きます。(多分)