![]() |
|
ワイバーンのとても暗く邪悪な心の奥深く、セリス川のほとり、マル・アボクニーのグリフォンの庭を覆い、人の足を踏み入れたことのない森林帯の上、第六のアポカリプスで倒された巨人たちの死骸 が満たし、捻れた角のユニコーンが穴を開けてもぐり込み(そしてこれらの空っぽの死骸の中からもっとたくさんのユニコーンが生まれ、ぐったりした四肢を満たして命なき怪物を歩かせた!)、コケの生い茂るベルトコンベアを下っていき、本当の地へと、本当の、本当の、本当の(本当に思えるようになった? そうなら教えて欲しい)、洞窟の内部構造、つやつやした岩、1戸1400平方フィート、ウォークインクローゼット付き、価格は変動します、「アンブローズの洞窟」、エルフとペットのハムの仲間たち! |
|
「私にはすごいペットがたくさんいるんだ!」 |
「おたくのペットだったらみんなバスに乗って行ってしまったよ!」 |
![]() |
||
「邪魔しないでくれ! |
「立ち去れ、お邪魔猫!」 |
みなさん、みなさん!
No.1: 私(ブリクス)
No.2: ハム 注意! エルフはリストに載っていません。 |
私はハムが汁をしたたらせる以外のことをするのを見たことがない。今日、私たちがアンブローズ洞窟に来たのはエルフに用があってのことだ。彼は次のレッスンで重要な役割を果たす。彼 が機嫌良くなるようにしよう。あなたのリスニングハットをウォーミングアップして! (それからその変なあぶみ付きのズボンは履き替えた方がいい。)
注意: このレッスンはゆっくりしたものになる。我慢してほしい。これは長くて深い呼吸になる。あなたの教育において最も重要なステージなのだ。最初はあまり多くのコードを学んでいないように感じるかもしれない。 ここではコンセプトを学ぶのだ。章の終わる頃には、Rubyの美が分るようになっていると思う。コードの心地良さが、あなたを慰める羽毛の寝袋となるだろう。
1. アンブローズにおけるステータスシンボルとしての葉っぱ
いいよ、エルフ。君の王国が直面している通貨の問題について簡単に説明してくれ。
![]() |
||
「我々は以前は(お金として)ブルークリスタルを使っていた。 |
「だけどお金を水泳パンツに入れておいても心配せずに済んだよ」 |
「ともかく、昆虫や甲虫はみんな葉っぱをお金に使っている」 |
なんか私が聞いていたのとは違うようだ。エルフはひっきりなしにポケベルを鳴らしてきた。私が電話をかけ返さないと、彼は私のポケベルにメッセージを残す。つまり、2回鳴って、それから小さな紙片がプリントアウトされる。その紙には 実質的には「早く降りてきて!」ということが書かれていた。それから「起業家芋虫の損害を地上から一掃すべきだ。あのねじれた虫のバイキングは私のブルークリスタルを窒息させている!」とも書かれていた。
後に、葉っぱとクリスタルの交換レートは安定した。木に成る紙幣は5クリスタルの価値がある。だから基本的な通貨の状況は以下のようになっている:
blue_crystal = 1
leaf_tender = 5
この例は、まったく前の章といっしょみたいだ。まだ始めだからね。ここでは2つの変数を設定している。イコール記号は代入に使われる。
さて、leaf_tender
は数5を表している(5ブルークリスタルということ)。この概念はRubyの半分に当たる。何かを定義している。何かを作っている。これは仕事の半分だ。代入というのは定義の最も基本的な形式だ。
しかし君は文句は言えないんじゃないか、エルフ? 君は森の生き物たちの新しい自由市場で、ブルークリスタルのキャッシングによって帝国を築いたのだから。(彼は私たちにはエルフでも、森の生き物たちには巨大なモンスターなのだ。)
![]() |
||
「その通りだ、ホワイ・・・ |
「アンダーグランド・アニマル・パーフェクト有限会社にようこそ」 |
「持っていたクリスタルは全部アニマルパーフェクトに投資したんだ。スターモンキーを作るところを見たい?」 |
いやいや、ちょっと待って。あなたはこのエルフが洞窟でやっていることを見るのは早すぎる。きっとあなたはそれがまったく非人道的で、いやらしく、病的で、ねじれてい る、などと思うだろう。
さて、あなたはアニマルパーフェクトのミッションステートメントは読みたいよね? これは本なわけだし、時間は十分にあるのだから。
昔、昔、スピードボートよりずっと昔、私は見事な競走馬を持っていたが、その馬はトラックで躓いた。馬は10回後足立ちになった後、壜いっぱいのマヨネーズを持った男にぶつかった。血とマヨネーズがトラック中に飛び散った。 その馬がひどいことになったのは言うまでもない。
獣医は馬を一目診て、二度と歩けないだろうと断言した。その馬の脚は駄目になってしまっていて、獣医は脚のない馬がのらくら暮らすなんてことを許そうとしなかった。私たち には安楽死させるしかなかった。獣医は自分の命とキャリアにかけて、みんなが2列に分かれることを求めた。彼の要求に反論できない者は一方に、あまりの頑固さゆえに獣医の間違い得ない医学的 判断を受け入れられないというものはもう一方に並べというのだ。エルフと、エルフのペットのハムと、それに私だけが、2番目の列に並んだ。
それで他の人たちがトロフィーや大きな花輪を馬のまわりに積み上げて、弾丸が馬の命を絶つ前にお別れをしようとしている間、エルフと私は狂ったように答えを求めてインターネットを叩い ていた。私たちはこの問題を私たち自身の手に引き取って、馬の脚の傷を生きたザリガニで切除した。それはすごくうまく行った! 私たちは馬を取り戻したのだ。まあ少なくとも、腹部に甲殻類の覆いのある馬の体を。
馬はその後どこでも走り回るようになり、心地よい湿気のある地下の穴で何年も生き続けた。
アニマルパーフェクトは、動物の増進の未来だ。新しい動物を作り、旧来の動物はパーツで助けている。もちろん長い時間がかかった。アニマルパーフェクトが始まった当初 には、あなたが目にしただろうものは、完全に成長した熊がアニマルパーフェクトに入ってきて、サングラスをかけた完全に成長した熊が出て行くということだ。全然いんちきだ。
そこにいたら、ジェットパックをつけた蟹を見られるだろう。新しい2004年モデルのジェット蟹だ。
今ではシステム全体がフル稼働している。そしてこの場所のきれいさは驚くばかりだ。装置という装置が輝いている。すべてがクロムめっきされている。ああ、それからスタッフは全員武器を隠し持ってい る。彼らは無断で入ってきた人は誰でも殺すように訓練されている。そして弾が切れたときには、彼らは無断で入ってきた人は誰でもピストルでぶったたくように訓練されてい る。
エルフ、スターモンキーを作ってくれ。
![]() |
|
天井に星形の穴をあける。 |
「星はマシンの中でモンキーが来るのを待つ」 |
想像上のRubyコードを書いてみよう:
pipe.catch_a_star
( パイプ . 星をつかまえる )
変数pipe
。メソッドcatch_a_star
。ルビイストの多くはメソッドをメッセージとして考えるのを好む。ドットの前に来るものは何で
あれ、メッセージを渡される。上のコードはpipe
にcatch_a_star
するようにと言っているのだ。
これがRubyの2番目の半分だ。ものに何かの動きをさせること。最初の半分で定義し生成したものが、あとの半分で行動し始めるのだ。
- ものを定義する。
- それに行動させる。
では、あの星をつかまえるコードが動くとどうなるのだろう? 星はどこへ行くのか?
captive_star = pipe.catch_a_star
( つかまった星 = パイプ . 星をつかまえる )
見ての通り、哀れな小さな星を集める仕事はあなたにかかっているのだ。あなたがやらなければ、それは単に消えてしまう。メソッドを使ったときはいつも何かが返ってくる。あなたはそれを無視してもいいし使ってもいい。
メソッドが返す答えを使えるようになると、あなたは支配できるようになる。
![]() |
|
ほら! |
「マシンの中のラチェットは、スターをモンキーの顔にはめ込むべく動く。うまくくっつくまで試していくのだ」 |
じゃあ、やってみよう。
starmonkey = ratchet.attach( captive_monkey, captive_star )
( スターモンキー = ラチェット . くっつける(つかまったサル, つかまった星) )
ratchet
はattach
メッセージを受け取る。くっつける必要があるのは何か? メソッド引数で指定したcaptive_monkey
とcaptive_star
だ。私たちはstarmonkey
を受け取り、それをつかまえておくことにする。
![]() |
|
「アニマルパーフェクト!」 |
「そうだ、それから彼らの右手に飾りとしてカエルを熱接着している。パセリの小枝みたいなものだ」 |
これはとても短い小さなプログラムなことが分かたので、全部1つのステートメントにまとめることにしよう。
starmonkey = ratchet.attach( captive_monkey, pipe.catch_a_star ) + deco_hand_frog
( スターモンキー = ラチェット . くっつける(つかまったサル, パイプ . 星をつかまえる) + 手の飾りのカエル )
pipe.catch_a_star
がメソッドへの引数の中に入っているのを見てほしい。つかまえられた星は直接ラチェットに渡される。それを取っておく場所を用意する必要はない。そのまま行かせればいいのだ。