第八話:オブジェクト
俺は、まだ自分が手にした力を前にして、恐怖で手の震えが止まらないでいた。
「師匠、俺は、彼らにどう....俺は....俺は....」
「まあ、そう気負ってもしょうがねえよ、わしにも、そういう経験は嫌というほどあるからな...」
そうやって、俺を気遣う師匠に俺は一生ついていこうと決意した。
「究人、とりあえずおめえにはZoneにおけるオブジェクト生成の作法を叩き込んでやる、移動しながら覚えろ」
「マジですか...そういえばさっきのあれ、あの銃のようなもの、理解できなかった。」
実際全く理解できないでいた。そもそもなぜマンホールに向かって発砲したのか、その後はなぜ不発のようなことが続いたのか。
そんなことをグルグルと考えていた。
「ああ、あれは、バッチっていうもんだ、その前に、UNITxのオブジェクト生成における基本原則は理解しているか?」
「はい、オブジェクトの特性を理解すること、それから、それらを可能な限り分解し、それぞれの要素をラムダと呼ばれる機能群にまとめる。最後にこれらを統合し再構築すること。」
「そうだ、概ねその理解で問題ない、ただ今の究人はあらかじめUNITxにおいて定義済みのラムダを呼び出すことしかできないということだ」
「なるほど...」
師匠の説明はとても的を得ていて、俺は頷くことしかできなかった。
「ラムダを直接呼び出したり扱うことが悪いわけじゃねえ、それにそれぞれのラムダを直列に繋いでいるわけだから、これは使い方を誤ると非常に危険だ」
「つまり、それは結局オブジェクトの生成すら叶わないということだ」
「どうゆうことですか??」
俺は結局中学時代は主にUNITxコマンドを叩いたぐらいだ、実践的なことはあまり経験がない。
「つまり、ラムダ単体では相互に作用させる必要があるオブジェクトは生成できない、オブジェクトというのは本来そういうものだ。それにラムダはネストできる。」
「なんとなくわかったような」
俺は苦笑いをしながらそう答えた。
「まあ手を動かしてみようじゃあねえか」
師匠はカバンから手裏キーボードを取り出して右腕に装着した。
そして追従するプロンプトを俺の前と師匠の前に表示した。
「おお、追従している...すごい」
「ハハ、こんなのはなんでもねえ」
そして片手にも関わらず慣れた手つきでUNITxを記述している。
「今回はUNITxにもともとあるジェネレータとcarライブラリでも使うか、車で移動するぞ」
=============
Zone-4000000000-unitx $ unitx edit car.ut
import car-*
unit Car {
lam accelerator {
car-accelerator()
....
}
lam brakepedal {
car-brakepedal()
....
}
lam clutchpedal {
car-clutchpedal()
....
}
....
}
....
:wq
=============
こんな感じで凄まじい速度でタイプする師匠のプロンプトをみて感動していた。
「す、すごい」
「ああ、車にはこんな感じでアクセルから始まり、ペダルやハンドル、ライトやら、分解していくと結局は全てラムダの集合でしかない、これをオブジェクトとして相互に組み合わせる、別にこれが正解じゃあねえがこれをオブジェクト指向なんて言ったりもする」
その後、何やらコマンドを叩いていた。
=============
Zone-4000000000-unitx $ unitx generate car.ut | ./buletlinker -o carbulet & ; exit
=============
すると、プロンプトが閉じて、師匠の上から一本の銃弾が落ちてきた。
「銃弾?」
「これはそうだな、車を生成するレシピのようなもんさ」
「「パシっ... サク、カシャン、スーーー,ガシャン カチ」」
そうして、銃弾をセットし、トリガーを引くと、一瞬にして前方に車が現れた。
「え、いつの間に、ロードは?、一瞬で現れた...」
「この速度は特別だ、基本的にこの程度でも複雑なオブジェクト生成には時間がかかる、まあおいおい説明するが、今はとりあえず理解できたか?」
「つまり、オブジェクト生成には基本的にラムダを定義し、それらをユニットとして定義すればよいということでしょうか?」
俺は、目を丸くしていた、たった1分で車が量産できることに。
「ああ、まあ理解できたようだな、そうだ、意図しない場合、プロンプトは必ず閉じるように。」
そうして俺たちは車に乗り込み、急いで崩れかけているビルに向かった。




