南極の図書館

ペンギンが寝ていた…。

プログラミング言語 Ruby 01

早速読み始めた。
時代の流れとしてはこんな感じ。

「Rubyデスクトップリファレンス」出版 2000年11月21日
↓
David L. Reynoldsさんが翻訳して「Ruby in Nutshell」2002年1月発行 Ruby1.6
↓
David Flanaganさんが協力して改定しようと。(オライリーの「JavaScript」を執筆された方です…。)
↓
ト部さんが日本語版のチェック
「プログラミング言語 Ruby」2009年1月

※なお、「初めてのRuby」は2008年6月発行、ピッケル本は2000年頃で第二版は2006年。

はじめに

「この本は〜「プログラミング言語C」の構成を緩やかに踏襲し〜」という記載がある。
どれだけ良質の例題があるのかと、期待してしまう。


目次を見ると6章からが本番のように見える。(P1〜P180は基礎知識かな)
ただ、2~5章は読み飛ばしていいわけではなく、むしろ、それらがメインとしてもいいくらいの出来ということなので、心して読みたい。
1章は「イントロダクション」とタイトルがある通りなのだろう。

第一章 イントロダクション

まず最初のページに「Rubyプログラマが楽しくプログラミングできるように設計されています。」(Matz)
こういうのは重要。

オブジェクト指向

カプセル化については厳格である。

ブロックとイテレータ

・timesとuptoはイテレータと呼ばれる特殊なメソッドの一種(整数)
・eachもイテレータ(配列とEnumerable)
・a.inject do |求めるもの, 添字|
・Hashはキーと値を渡す。(Arrayは値を渡す?)
・全てのオブジェクトはto_sを持つ(全てのスーパークラス(モジュール?)のメソッド?)

式と演算子

演算子

 +, *, ==, **, ""+"", ""*3, ""%[n, ""], >, ?, :,

・独自定義の効果が高いものの一つに[]がある。

メソッド

・メソッドの戻り値は最後に評価された値
・グローバルメソッドは、Objectクラスのプライベートメソッドとなる
・メソッド名の前にオブジェクト名をつけると、特異メソッドと呼ばれる。
・クラスやモジュールはオープンであり、変更、拡張ができる。

代入

・=はオーバーライドできない
・a, b = b, aが可能
・x, y, z = [1, 2, 3]も可能
・a, b = ex_method(2,3) #メソッドが二つの戻り値を返すなら可能

記号

・!つきのメソッドはmutatorメソッド(オブジェクトをその場で書きかえる)
・$はグローバル変数、@はインスタンス変数、@@はクラス変数

正規表現と範囲

・Ragexpオブジェクト、Rangeオブジェクト、==と===について。

クラスとモジュール

・yield x #イテレータ付属ブロックにxを渡す
・alias size length #sizeはlengthの同義語になった
・読み込みのコアクラスを含め、全てのクラスがオープン

意外感の残るRubyの機能

・文字列がミュータブルなので、プログラム内の文字列リテラルは一意なオブジェクトではない。
 freezeメソッドを呼べば、新たな変更ができなくなる。
・0はtrueである(Cではfalse)。""はtrueである(javascriptではfalse)。

Rubyを使ってみよう

・jRuby:Ruby1.8互換がjRuby1.1で、主にsunが開発している。
・IronRoby:Microsoftが.NETに合わせて作っている。まだ1.0になっていない。

出力の表示

・putsはto_sメソッドを呼び、文字列を出力する。printは改行の追加をしない。
 p関数はto_sでなく、inspectメソッドを使う。配列のときに「配列リテラルの記法」で出力する。
・irb:inteructive Ruby 対話式で、抜けるときはquit
・ri:ドキュメントを見る。
 ri Array.sort(通常), ri Hash#each(インスタンスメソッド), ri Math::sqrt(クラスメソッド)など。
・gem:Rubyパッケージ管理システムRubyGems
 サブコマンドの例:list, enviroment, update rails, update, update --system, uninstall rails
rubygemsモジュールをロードするとrequireメソッド自体が変わり、標準ライブラリを検索する前にgemの検索をするようになる。などなど。(P15)


1章を終えて

1章最後の例題(数独ソルバ)は写したけど理解ができていない。
オライリーJapanでもこんな感じ(↓)だし、わからなくてもとりあえず進むべきかな。いきなり難しい。


・まつもとゆきひろ『プログラミング言語Ruby』を大いに語る
http://www.oreilly.co.jp/community/blog/2009/04/matz-talks-the-ruby-book-ch01-04.html

―1章の最後に「数独ソルバ」というサンプルが載ってるんですが、それが多分、中に書いてあるコードとして一番長いので、最初に意表をついてイントロダクションと言いながら本気出しているので、(読者は)結構大変だと思います。

いきなり「数独ソルバ」ってのが。

―あれ、ちゃんと動くのがすごいんです。

それは動かないと困るけど。

―監訳するにあたって、一応チェックしなきゃいけないと思ってですね、「この数独ソルバ本当に動くのかな」と動かしてみたら「あー動くよ」と。

「あー動くよ」って(笑)。

―あたりまえですけどね。プログラミングコードとしてはかなり短い。ちゃんと説明が入ったコードで短いんですけど、ちゃんと動くのでびっくりしました。

David Flanaganはプログラマとしてもそれなりの実力があるということを示しているんじゃないかと。(Rubyの)メソッド2つといっても、Cで書いてますからね。ところで「数独」はやってますねえ。


例題が長かったとはいえ、ようやく1章が終わり。
GWまでかかってしまうかな。