初めてのRubyを読み終えました!

通勤時にICONIAのPDFビューアを用いて読んでいた 初めてのRuby を読み終えました。

たのしいRubyを読んだときとは少し違ってRubyが見えるようになったのはとても楽しい経験でした。Evernoteを使ってメモを残したのですが、今後のためにメモをメモっておきたい…(ーー;)と思います。

インクリメント、ディクリメント演算子はない(P.107)

これは意外でした。コラムに書いてるとおりイテレータが基本なので困らないのかもしれないですが、単純に1を加算したいときには便利だと思うのですが…。

多重代入は便利だけど乱用厳禁(P.109)

プログラムを始めたての頃、変数宣言をするときはすべての変数の初期化を省略せずに一つずつ書きなさいといわれたことを思い出しました。多重代入は単純な場合は便利だと思うけれども、複数の括弧が出てくるようになると訳がわからないですね。とりあえず、使用しない方向で行こうと思います。

入れ替えは比の法則と同じ

Rubyは分数計算を行うこともできるのですが、この辺も直感的ですよね。

[sourcecode language="ruby"] r = Rational(2,5) + Rational(1,4) # 2/5 + 1/4 p r # 13/20 [/sourcecode]

rubyの真偽値はfalseとnilのみ偽として定義されている。それ以外はすべて真。(P.103)

これはC#やJavaとは大きく異なるところで、最初はとても戸惑いました。オブジェクトがnilの場合は条件の判定がfalseになるので、条件文がいまいち理解できないでいました。

[sourcecode language="ruby"] a = nil

if a p "true" else p "false" # aはnilのためこちらが表示される end

a = false if a p "true" else p "false" # aはfalseのためこちらが表示される end

a = 1 if a p "true" # aはnil、false以外のためこちらが表示される else p "false" end

[/sourcecode]

case文が美しいこともある (P.117)

これは、SQLのCase句とにているかなぁと思いますが、if - else を列挙する場合に比べて、case - when を列挙する方が美しく感じることがあります。ただ、美しいと感じるかは人それぞれなので難しいですが…

procがいまいちよくわからないなぁ(P.140 )

Procの使い方や使用方法がいまいち理解できていないです。「イテレーターでブロックをProc化して貯めておく」とかわからなかった…。

クラスメソッドはselfを用いて定義する (P.145)

クラスメソッドはC#やJavaで言うところのstaticメソッドです。クラスメソッドのレシーバーは"self"になるわけですが、レシーバーはクラス名でも大丈夫なわけです。でも、リファクタリングなどのことを考えると、"self"を使用する方が間違いが起きにくいですね。

evalは素晴らしい!コマンドを実行できるぜ!

evalメソッドはちょっと驚きました。このメソッドって、何でもありじゃないですか!文字列を引数に渡すと、文字列をプログラムステートメントとして実行したりって…C#でReflectionを初めて触ったときのような、そんな快感を感じそうなメソッドですね。

でも、このメソッドってかなり危険かも。無秩序に使用すると…(以下略

たのしいRubyも素敵でしたが、こちらの初めてのRubyはもっと素敵でした。何が素敵って、初心者向けの書籍にはない黒魔術なんて書いてあるわけですから、とてもわくわくしてしまいますよね。

さて、8月から9月中旬にかけてRubyの入門書を一通り読んだわけですが、楽しかったです。新しい言語、しかもこれまでとは一風変わった言語を学ぶって楽しいことですね。

9月後半と10月くらいは設計や業務知識のインプットを行おうと思っています。ちょうど、日本Androidの会千葉支部でも「UML/オブジェクト指向をつかおう」についての勉強会もありますし、じっくり考える、思考力を養うような書籍を読んでいこうと思います。

ちなみに、この勉強会ではソフトウェアの設計について日頃から疑問に思っていることや困っていることの解決なんかもみんなで話したりすることができると思います。先日の勉強会後の懇親会でもUMLや設計、抽象化などディスカッションを行いましたが、とても楽しく得るものが多かったように思います。

興味のある方は是非ご参加ください。