Rubyを触ってみる。

今日一日暇を見てRubyを触ってみた。
Linuxでも導入は簡単ですね。
SuSEならYaSTrubyを検索すればOK。
あとは、rubyruby-develとgemを導入すればOK。
railsの導入はgemコマンドでできる。
プロジェクトを作るとWebricまでついて作成されるので超便利ですね。

で、使ったIDEはRedRails。
Aptanaもいれればかなり良い環境になりますね。

一通り使ってみたけど、
基本的なところはそれほど他の言語と変わらず。
iteratorが充実してるのと、バリバリオブジェクト指向なので
その辺で多少戸惑いがあるけど、慣れでしょうね。


以下、やってる中で、覚え書き的に書いたもの。
C,Java,PHPに精通していればこれだけ分かれば基本はバッチリでしょう。

数・式について
基本的に他言語と同じ。
注意すべき点
累乗について:累乗の計算は**で可能。ただし、累乗を連続して書くと、後ろから順に実行される。
つまり、2**3**2の式は2の3乗の2乗ではなく、2の(3の2乗)乗となる。 よく考えれば当然か・・・
Javaなら絶対値をもとめたり、数値変換はMathクラスもしくは、各変数のクラス(Integerなど)を使用するが、Rubyではすべてがオブジェクトなので、10.absで絶対値が求まる。他も同じような使い方ができる。
floor,round,ceil,to_iなどが使用できる。

関数について
関数にはreturnがない。
戻り値の指定もする必要がない。
戻り値の指定は、
関数の最終行に変数もしくは値を書いておけば自動的にそれが戻り値として扱われる。
また、ブロックは{}でなく、def~end(ほかもdo~endやif~end)なので、C,javaプログラマにとって慣れが必要であろう。文の区切りが改行なのも慣れが必要だろう。
デフォルト引数も使えるので、必要であれば使おう。

def plus(a, b)
a+b
end

関数・メソッドの書式について
どうやら判定するようなメソッドは最後に?をつけるようだ。
empty?など。 またクラスメソッドで、内部を書き換えてしまうようなメソッドは!〜とするのが慣わしのようだ。

スコープについて
スコープについては、C,Javaと同じと考えてよい。
ただし、インスタンス変数だけは例外的なので注意すること。

イテレータ関連
Rubyをやったことがない人が一番学ぶべき箇所がここだろう。
様々なイテレータがあるので、よく理解しよう。

範囲オブジェクト
数値などの範囲を表すことができる。
1..10で1から10まで。
1...10で1から9までを表す。
また、範囲オブジェクトと値の比較ができる。
1 <= a && a <= 10
は 1..10 === a
と書くことができる。
===演算子は左右非対称なので、左に範囲、右に値を書かないとエラーになる。

単純な繰り返し。
Javaでは繰り返しはforもしくはwhileを使わないと実現できないが、それさえも他の方法で実現できる。
数値オブジェクト(つまりは数値変数もしくは定数).timesで繰り返しが可能だ。

10.times do
#繰り返す内容
end
カウンタが必要な場合は
10.times do |i|
#繰り返す内容
end
と書く。この|変数|のことをループ変数もしくはイテレータ変数と呼ぶ。
この記述は他でも使うので覚えておくこと。
一応、do~endの代わりに{}が使えるが、特にどちらを使っても結果は変わらないので、どちらか一方を使うほうがよいだろう(一応、結合度の面で多少違いがあるようだ。)
真のRuby使いであればdo~endを用いるべきだろう。


範囲オブジェクトによる繰り返し
範囲オブジェクトを指定して、繰り返しを定義することができる。
foreachのようなものだと考えればいいだろう。

for i in (1..10) do
end

もしくは
(1..10).each do |i|
end

ここで注意。Rubyではfor文のブロックがスコープとしてみなされない。
なので、for文の内部で宣言した変数はそれ以降使えてしまう。
C,Javaプログラマは特に注意が必要だろう。

文字列
文字列は、PHPとほぼ同様と考えてよいだろう。
""の文字列と''の文字列がある。
変数を内部に埋め込みたいときは、
#{}を使用する。"#{a}"
これは、''の文字列では無効となるので、注意が必要だ。

また、演算子Javaが参考になる。+で連結ができる上、
*が使える。 "a"* 10は"aaaaaaaaaa"だ。

文字列から数値への変換は、"文字列".to_iなどで可能だ。

配列
配列はPHPそのものだといってもいい位だろう。
何でも入るのが特徴だ。配列に配列を入れることもできるし、数値だろうが、文字だろうがかまわず入る。

配列の宣言は
array = [10, 20, 30]
のように行う。
配列の配列であれば
array = [10, [20, 30]]
20と30が配列の配列に入っている。

取り出しは
array[0]で可能だ。

さて、Rubyがすごいのはここからだ。
配列を連結することができる。
array1 + array2
配列に追加する場合は<<を使う。
array << 6

範囲オブジェクト同様の手段で繰り返し処理も可能だ。


と、ここまでやっておいて、Rubyを使いこなすには、
正規表現が絶対的に必要って事。(スタンドアロンで使う場合)
正規表現をもっとやろうと。