Perl使い、C/C++使いには参考になるかもしれないRubyの感想

概要

「たのしいRuby」という本を半分くらい読んだので、特徴をまとめておこうという話。
この本を読んだだけなので、だいぶ無責任な内容になってるけど、雰囲気は伝わると思います。
ちょっと古めの本なので、内容に一部、誤りがあるかもしれない。
メモを兼ねた入門……のような構成のつもり。

オブジェクト指向の話

intとかdoubleなどの基本型もすべてクラス。「文字列オブジェクト」なんて言葉もでてくる。
RubyにはStringというクラスがある。

"こういう文字列がStringクラスのインスタンスだお"
"12345".to_i

このようにすれば、Cのatoiみたいなことができる。

コメント

# これはこめんと
=begin
このへんも

コメント
=end

文字列

  • Perlと同じで「"」で囲っても、「'」で囲ってもいい
  • 「"」で囲った場合はエスケープシーケンスが使える

数値

数値もオブジェクトなので、以下のようなこともできる。

100.times {
   print 'この部分が100回くりかえされる'
}

ifとかunlessとか

if a == 1 then
    print 'hoge'
elsif a == 2 then
    print 'fuga'
else
    print 'piyo'
end
print 'yes!' if flag

ループ

while, for, untileなんてのがある。C/C++とはちょっと違う感じかもしれない。

変数

  • 宣言はいらない
  • メンバ変数には@というprefixがつく
  • staticメンバ変数には @@ というprefixがつく
配列
arr = [ 1, 2, 3, 4, 5, 6, 7, ]

各要素へのアクセスはarr[0]のように。また、arr.sizeで配列のサイズがわかる。
範囲外の要素にアクセスすると、nilが返るらしい。

ハッシュ

代入はperlと同じ感じ。
アクセスは配列と同じようにブラケットで囲む。

hash = { 'a' => 1,   'b' => 2, }
print hash['a']

メソッド(関数)

  • 関数という言葉は出てこなかった
  • Perlと同じで、呼び出すときのカッコは省略可能

定義は以下のように。

def func
    print 'hoge'
end

モジュール

#include <math.h>

ってやるところを

include Math

って書く。なんかさびしい。
includeしなくても

Math::sin

でsinを呼び出せる。
perlと同じように、requireでスクリプトを読み込むこともできる。

クラス

インスタンスを作る
arr = Array.new
クラス名
arr.class
アクセス制限とか
attr_accessor: hoge

ってやると、そとからアクセスできるようになる。*1
attr_readerとかattr_writerでというのもある。

継承
myclass <- oya_class

多重継承はできないらしい。

演算子

比較は==だし、代入は=だし、パターンマッチは=~だし、ほとんどCやPerlとかわらないかと。
ただし===とかいう謎の演算子がある。けっこう便利そうだけど。

その他

  • コマンドライン引数はARGV
  • セミコロンは必要ない
  • すべてのオブジェクトには一意なIDが振られている*2
  • bool値を返すメソッドは、たいてい最後に「?」がつく

ファイルアクセス

fh = open( filename)
....
fh.close

fh.readでまとめて読める。また、fh.getsで一行ずつ読める。

*1:実際には、hogeと、hoge=というメソッドが定義される

*2:自己代入対策とかに使えるのかな?他に何につかうんだろうか