第28話 クラス★

(……なんかなー、スプリンクラーみたいな感じに出せたらいいのになぁー)


 ユキはふと、前世にあった散水機スプリンクラーのことを思い出す。

 装置を中心に3~4方向に対して、回転するように水を撒くものだ。


(スプリンクラーって、なんかついついぼーっと眺めちゃうんだよなー。でも……あれを真似するためには……今、知ってるパラメータだけじゃできない)


 スプリンクラーの水の動きを真似するには、ユキが今、解読できている初期値設定だけでは、実現できない点があった。


 それは〝複数同時発射〟である。


 スプリンクラーは3~4方向に対して、同時に水を放出している。

 だが、現在、ユキが解読できている範囲では、弾は等間隔で1つずつ出すような仕組みになっており、複数同時発射はできなかった。


(うーむ……ちょっと骨が折れるけど……少し、解析してみるか……)


 ユキは意を決して、魔法論理マジック・ロジックの解析に着手した。


 まずはユキがこれまで触ってきた処理を改めて確認する。


////////////////////////////////////////////

// 弾の初期化処理

time = 1200 // 射出時間

interval = 60 // 射出間隔

angle = 360 / 10 * count / 60 // 射出角度

position = device.position //射出位置

size = 0.5 // 大きさ

power = 0.1 // 威力

if(count % 120 == 0){

 attribute = ICE // 属性=氷

}

else{

 attribute = WIND // 属性=風

}

speed = 0.1 // 速度

acceleration = 0 // 加速度

 ・・・

////////////////////////////////////////////


 これが今まで、散々、改造してきた初期化処理である。

 これだけでも結構、魔法をアレンジすることはできた。


(今まではここまでしか解析できなかったけど、きっと今ならもっと詳細を解析できるんじゃないかな……)


 ユキの解析能力も初期に比べると、成長していた。

 実際、冷蔵庫の開発過程においては実行エグゼ宣言なしでの自動走行を成功させるなど、それまではできなかった……いや、できないと思っていたことも成し遂げられたのだ。


(よし……! 気合入れて頑張るぞ……!)


 まず、ユキはこの初期化処理の大元となっている要素がないかを探してみることにした。


(恐らく……このパラメータも何かしらの〝クラス〟の中のパラメータなんじゃないかな……)


 ユキはプログラミングにおいて、かなり重要な要素である〝クラス〟の存在が魔法論理マジック・ロジックにも実装されていることは、ほぼほぼ確信していた。


 なぜなら、そのすでにその存在を暗示するコードに遭遇していたからだ。


 例えば、下記が代表例だ。

////////////////////////////////////////////

position = device.position //射出位置

////////////////////////////////////////////


 この射出位置を設定するコードの右の値

 device.positionはデバイス(device)の位置(position)を表しているわけだが、

 これはつまり位置(position)という要素を持つ、上位の存在であるデバイス(device)が定義されていることを暗示していた。


 ユキが初めて魔法論理マジック・ロジックを読み取ることができた時、すでにコードの中にdevice.positionは使用されていた。

 ゆえに、変数名から、きっとデバイス(device)の位置(position)を表しているのだろうと〝予想〟して、これまで使ってきており、実際にそうであったわけだが、実はこのデバイス(device)の中身が具体的にどういう構成になっているのかについては、今まで解析してこなかったのだ。


 だが、ユキは前世のプログラミングの経験から、なんとなくきっとこのような魔法論理マジック・ロジックをしているのだろうという予想をしていた。

 それが、下記のような魔法論理マジック・ロジックである。


////////////////////////////////////////////

class Device{

 position // 位置

 angle // 角度


 // 以下、ひょっとすると、こんなのがあるんじゃないかと予想される要素

 count // カウンター

 temperature // 温度

 など

}

////////////////////////////////////////////


 このように、クラス(class)では、

 デバイス(Device)の中に、必要な要素である

 ・位置(position)

 ・角度(angle)

 などを集約している。


 そうすることで、

 それぞれの要素をバラバラに扱うよりも、分かりやすくなるのである。


 これがクラス(class)の定義の初歩的な考え方だ。


 更に、クラス(class)のもう一つの特徴は、処理(メソッド)を持つことができることだ。


 例えば、このようなイメージだ。


////////////////////////////////////////////

class Device{

 // 要素の定義

 position // 位置

 angle // 角度

 count // カウンター

 temperature // 温度


 // 処理(メソッド)の定義

 // カウンターの初期化処理(メソッド)

 init_count(){

  count = 0 // カウンターを0で初期化する

 }

}

////////////////////////////////////////////


 上記の例のinit_count()がクラス(class)における処理(メソッド)である。


 つまり、

 クラス(class)とは、特定のモノに対して、

 そのモノが所持している〝要素〟と〝処理(メソッド)〟をひとまとめにできる便利な仕組みである。


 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

【プログラミング豆知識】


 以前、

 device.positionのように、

 左の値ドット右の値

 というように、〝ドット〟でつなぐ場合、


 左の値〝の〟右の値


 user.execute_magic()のように右側に()が付くと、意味が変わり、


 左の値

 という意味になると説明しましたが、その理由がまさにこれです。


 クラスの内部にある〝要素〟や〝処理(メソッド)〟を使うために用いるのがドットです。


 クラスには〝要素〟と〝処理(メソッド)〟があり、処理には()が付くため、上記のように意味が変化します。


(なぜ処理(メソッド)には、()が付くのかについては、別の機会に説明しますが、まずはそういうものだと思っていただければと思います)


 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


 このクラス(class)という仕組みがあることを前提に考えると、

 ユキは、ある一つの仮説を立てることができた。


 それは、今まで、ユキが変更していた魔法論理マジック・ロジックが、特定のクラスの処理(メソッド)の一部なのではないか? ということである。


 確信はない……だが、きっとそうであると信じたならば、ユキにできることは集中して魔法論理マジック・ロジックを感じ取ることだけだ。




=======

【あとがき】

ついにclassの登場です。classは、昨今のプログラミングでは、けっこう重要な考え方なので、是非ご参考に。

でも〝要素〟と〝処理(メソッド)〟があるって、〝ステータス〟と〝技〟があるゲームのキャラになんとなく似てますよね。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る