現役大学生のプログラマー日記 #6 【最終回】

こんにちは。アルバイトのイシイです。
女子大生のプログラミング格闘記、第六話です。
前話で開発がスタートし、社内のデータ管理をするプログラムの一部をつくり始めました。始めて早々にとてもややこしい障害にぶち当たったので、今回はそのややこしい話をします。

データ型とクラス型


私が今回作るのは、マスタデータを管理するページです。例えば社員名簿を管理するページを作るのですが(社員の名前が一覧でき、また新たに入社した社員の名前を追加したり、名前を書き換えたりできるようにします)、ゲーム風にすると、登場キャラクターとその役職を一覧できるようにして、キャラクターの情報を書き換えたり、新しくキャラクターを作れるようにするページですね。変更できる情報はキャラクターの名前と役職です。
このページはCharacterクラスとJobクラスで作っていきます。役職(Jobインスタンス)はJobクラスで定義されており、勇者(id=1)、魔法使い(id=2)、僧侶(id=3)があります。さらにCharacterクラスにて名前(nameフィールド)と役職(Jobフィールド)が定義されています。
勇者をやっていても転職したくなる時ってありますよね。その時に魔法使いや僧侶に変えられるようにします。
名前が「ショウタ」、役職が「勇者」であるキャラクターを例にしていきますね。
キャラクターの名前を「ショウタ」から「リョウ」に改名したいときには、プログラムはXHTMLからMBeanが「リョウ」の名前を受け取って保存すれば完了です。このとき「リョウ」の名前はCharacterクラス型で受け取り、Characterクラス型で保存します。これで「名前:ショウタ、役職:勇者」だったキャラクターは「名前:リョウ、役職:勇者」になりました。
さらに勇者から魔法使いに変える、つまり「名前:リョウ、役職:魔法使い」に変えるとします。このときも同様にXTMLからMBeanが「魔法使い」の情報を受け取って保存すれば完了なのですが、役職を変える場合、データの「型」がややこしかったんです。
まず大前提として保存はすべてCharacterクラス型でなければいけません。改名する場合はCharacterクラス型で情報の受け渡しができたのでそのまま保存できました。一方、役職はJobクラスで定義された「勇者」「魔法使い」「僧侶」の3つから選ぶようになっており、情報の受け渡しはそれぞれに割り振られたidで行います。つまりInteger型で受け渡しが行われます。しかしそのInteger型で受け取った情報を保存するときはCharacterクラス型で保存しなければいけない…。
最初は安直に「Integer型からクラス型にキャストすればいいじゃーん!」と思ったのですが、そういうわけにもいかないんですね。
この時私はInteger型からいきなりCharacter型にすることを考えていたので上手くいかなかったのです。頭の中がこんがらがっていた私は、ひとまず手順を整理していくことにしました。
まず、やりたいことは役職を「勇者」から「魔法使い」に変えることです。スタートは「Integer型でJobのidを受け取る」こと、ゴールは「JobをCharacter型で保存する」ことです。ゴールには「Character型のJob」の情報が必要になります。
ここで一つ気が付きました。このセッターであるsetJobを使えば勇者が魔法使いに変更される上、JobフィールドはCharacterクラス型で定義されているためCharacter型のデータになります。setJobの引数はJob型です。つまりJob型のJobデータをもってこればsetJobを使うことができ、Character型のデータにすることができるということになります。
はい、ここで一度手順を整理します。
①魔法使いのid(Integer型)を受け取る(この時点ではまだデータは「勇者」のまま)
②Job型の「魔法使い」データを取得する
③CharacterクラスのsetJobメソッドで「魔法使い」(Jobクラス型)をセットする
④セットしたJobフィールドの「魔法使い」(Characterクラス型)を保存する
手順を整理してみると気付きました。私は①の時点でなんとなくJobの情報を受け取った気でいたのですが、受け取った情報はInteger型です。つまり言うなればただの数字です。「勇者」や「魔法使い」ではなく、ただの「1」や「2」といった数字なのです。これ単体ではただの数字でしかありません。しかしこの「2」という数字は「魔法使い」のidです。つまりこのidを使って「魔法使い」の情報(Job型)をもってくればいいのです。
そのことに気づいた私はようやく見つけました。idを使って魔法使いのデータを持ってくることができるメソッドがServiceクラスにあったんです。このメソッドを使えば、Integer型のidを使ってJob型のJobデータを持ってこれます。
関門であった手順の②を突破したらあとは③、④と続きようやく「名前:リョウ、役職:魔法使い」にすることができました…!!今思えば、とてもシンプルで簡単なことだったのですが、当時の私にはとてもややこしい障害でした。それを乗り越え、達成感でいっぱいです。経験値を大量にゲットし、プログラマー(仮)レベルはLv.7に上がりました。

最後に

このややこしい障害を乗り越えた後も何度もややこしい障害を乗り越え、無事に私が担当した部分のプログラムは完成しました。プログラミングのプの字も知らなかったイシイでしたが、いつの間にか、少しプログラミングできるまでに成長していました。自分でも驚きです。プログラマー(仮)レベルはまだまだLv.7であり、(仮)がとれるのはもっともっと先です。そのレベルの上限はおそらくないのでしょう。
この全六話を読んで、私のようにプログラミングの世界を全く知らない方が少しでもプログラミングに興味を持ってくれたら嬉しいです。(終わり)
【これまでのプログラミング格闘記】
現役大学生のプログラマー日記 #1(Java)
現役大学生のプログラマー日記 #2(オブジェクト指向)
現役大学生のプログラマー日記 #3(HTML/CSSとSQL)
現役大学生のプログラマー日記 #4(フレームワークと環境構築)
現役大学生のプログラマー日記 #5(実開発開始とIDE)

関連記事

  1. 現役大学生のプログラマー日記 #4

  2. 【新年のご挨拶】明けましておめでとうございます

  3. 新年明けましておめでとうございます

  4. 最高にアットホームなBBQパーティに参加しました

  5. 現役大学生のプログラマー日記 #1

  6. ソフトも作れるメーカーだからこそできるIoTコンサルティング