さて、とうとう私はサンフランシスコ発成田行きノースウエスト航空27便エコノミークラスの人となった。
飛行機は何度乗っても苦手である。特に離陸の際の加速がいやだ。これから長時間、空飛ぶ密室に閉じ込められ自由を奪われるという拷問が始まるのだということを嫌が上でも認識させられる。圧迫感で息が詰まりそうである。
飛行機はそろそろ安定高度に入り、シートベルトを外してもよいというサインが出た。乗客はやれやれという素振りでシートベルトを外し、三々五々伸びをしたり、トイレに立ったり、雑誌を取り出したり、ヘッドフォンを取り出して装着したり、ニンテンドーDSや、PSPに没頭しだしたり、いきなりイビキをかきだしたりしている。
中には嫌う人もいるけれども、私は窓際が好きである。この飛行機は落ちずにしっかり飛んでいるのだということを常に確認しておかないと不安だからだ。
千切れて取れそうなぐらいガクンガクンと揺れている翼を見て気分が悪くなる人もいるらしいが、私などは飛行機がけなげににちょこちょこと羽ばたいているようで、微笑ましくも感じる。だいたい、あれぐらい遊びがないと、空気の抵抗でポッキリ折れてしまうのである。
また、窓からどんどん小さくなっていく街並みを見るのがちょっと好きだったりもする。地上はすっかり見えなくなり、視界に入るものといえば雲ばかりという状態になったが、千変万化する雲の形を見ていると面白く、暫くぼんやりと眺め続ける。
隣のでっぷり太った初老の紳士が、しきりに自家製と思われるフライドチキンを勧めてきたが、表面に脂がドクドクと付着していたので、見ただけでムネが悪くなり、丁重に辞退させていただいた。初老の紳士は『オーゥ』などと大袈裟に歎息している。フライドチキンぐらい黙って一人で食え。大体そのベタベタの指はどこで拭くつもりか。
真紅たちのことが気になり、ごそごそとパソコンを取り出して自作のVAIOハッキングプログラムを起動してみたが、さすがにこの機内からではノルゴリズム世界にアクセスできないようだ。仕方なく空港で買った雑誌をパラパラとめくってみたが、真紅たちのことや洋子のことが気になって全く頭に入ってこず、文字情報が網膜を通じて脳の一部に投影されるものの、意味をさっぱり理解しない人間OCRと化してしまった。
そんなことをしていても仕方ないので、雑誌をクルクルと丸め、カバンに放り込んで瞑目する。すると、また隣の紳士がつんつんと二の腕を突っつくので、何事かと思ってみてみると、今度は自家製ハンバーガーを勧めてきた。なんと、ハンバーグが五段重ねになっている。見ただけで酸っぱい胃液がこみ上げてきた私は、また丁重にお断りする。紳士はまた、『オオーゥ』などと大袈裟に歎息した。だからメタボリックシンドロームで命を落とすのは自分だけにしておけ。他人を巻き込むな。ほら、そんな角度で頬張るから、肉汁やらドレッシングやらがこぼれまくっているではないか。またそれをどこで拭くつもりだ?
瞑目していろいろなことに思いを馳せていると、今度は大きないびきが聞こえてきた。初老の紳士は満腹になった人間の常として、居眠りを始めたのだ。『ガー』と大きないびきの後、十数秒間無音状態が続くので安心していると、いきなり『ッグゴゴォー』っときてびっくりしてしまう。これは完全な『睡眠時無呼吸症候群』だ。頼むから隣で還らぬ人にならないでくれよ。
うるさくてゆっくり考え事もできないので、ヘッドフォンを装着して、ボリューム最大で音楽を聴く。
さて、することもないから、空港ではRubyにおける『クラスライブラリ』の概要を考えてみたので、今回はもう少し突っ込んだところまで考えてみよう。
しかし、あまり突っ込みすぎるとズルズルと深みにはまり込んで生還できなくなるので、Rubyにおける『組み込みクラス』について考えてみたい。
『組み込みクラス』というのはなんぞやというと、Rubyインタプリタプログラムに既に組み込まれているクラスのことである。
Rubyの組み込みクラスには以下のものがある。これは、Rubyリファレンスマニュアルから抜粋したもので、細かく解説しても、結局マニュアルを書き写すことになるだけだから、詳細は各自ご確認いただきたい。
| Object |
全てのクラスのスーパークラス。オブジェクトの一般的な振る舞いを定義する |
| Array |
配列クラス。要素は任意のRubyオブジェクト。すなわち何でも格納できるということである |
| Binding |
ローカル変数のテーブルと self、モジュールのネストなどの情報を保持するオブジェクトのクラス。組み込み関数 binding によってのみ生成され、eval の第 2 引数に使用する |
| Continuation |
直前の状態(ローカル変数の定義、スタックフレーム)を格納するクラス |
| Data |
拡張ライブラリを書く時に new が定義されているとまずい場合があるため、Object から new だけを undef したクラス |
| Exception |
全ての例外クラスのスーパークラス |
| Dir |
ディレクトリ内の要素を順に返すディレクトリストリーム操作のためのクラス |
| File::Stat |
ファイルの情報を格納したオブジェクトのクラス |
| Hash |
ハッシュテーブル(連想配列とも呼ぶ)のクラス |
| IO |
基本的な入出力機能を実装する |
| File |
IOクラスのサブクラス。ファイルアクセスを行う |
| MatchData |
正規表現のマッチに関する情報を扱うためのクラス |
| Method |
クラスのインスタンスからメソッドのみを抽出する |
| Module |
モジュールのクラス |
| Class |
クラスのクラス |
| Numeric |
数値を扱う抽象クラス |
| Integer |
Numericクラスより派生。整数の抽象クラス |
| Bignum |
Integerクラスより派生。多倍長整数のクラス |
| Fixnum |
Integerクラスより派生。マシンのポインタのサイズに収まる長さの固定長整数。ほとんどのマシンでは 31 ビット幅である |
| Float |
Numericより派生。浮動小数点のクラス。Float の実装は C 言語の double で、その精度は環境に依存する |
| Proc |
ブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)とともにオブジェクト化した手続きオブジェクト |
| Process::Status |
Process.wait などで生成されるオブジェクト。プロセスの終了ステータスを表現する |
| Range |
範囲オブジェクトのクラス |
| Regexp |
正規表現のクラス |
| String |
文字列のクラス |
| Struct |
構造体クラス |
| Symbol |
シンボルを表すクラス |
| Thread |
Ruby のスレッドを表現するクラス |
| ThreadGroup |
Thread はグループを持ち、必ずいずれかのグループに属する。 ThreadGroup クラスによりグループに属する Thread をまとめて操作することができる |
| Time |
時刻オブジェクト |
| UnboundMethod |
レシーバを持たないメソッドオブジェクトのクラス |
| TrueClass |
trueのクラス。trueは、TrueClassの唯一のインスタンスである |
| FasleClass |
falseのクラス。falseは、FalseClassの唯一のインスタンスである |
| NilClass |
nilのクラス。nilは、NilClassの唯一のインスタンスである |
さて、リファレンスマニュアルからごそっと組み込みクラスを抜き出してきたわけであるが、これらを眺めていて何かを感じないだろうか。
それは、これら組み込みクラスが、Rubyでプログラミングを行うにあたって、クラスであることを意識せずに使用できる、核となる要素が、実はクラスだったんだと再認識するだけのものが多いのである。
例えば、Arrayクラスだ。
Arrayクラスのオブジェクトは、Arrayがクラスであるということを意識すれば次のように生成する。
a=Array.new([1,2,3,4])
ところが、次のように生成しても立派なArrayクラスのオブジェクトになるのである。
a=[1,2,3,4]
Rubyでは、[1,2,3,4]と記述したとたん、それがArrayのオブジェクトとして認識されるわけだ。これは、Hash、Bignum、Fixnum、Float、Range、RegExp、String、TureClass、FalseClass、NilClassなど、多くのクラスに当てはまるのである。
if a==true; ~ end
などと記述する場合のtrueが、実はTrueClassのオブジェクトであったのだということなのだ。
さすがは、全てのものがオブジェクトであるRubyならではの組み込みクラスライブラリであるといえよう。
最終更新:2009年03月06日 18:47