【価格比較アプリ開発秘話④】
こんにちは。coromin開発担当です。
今回は開発にあたり、苦労した話をします。
結果表示の際に、①と②の1あたりの価格が等しかった場合、「①と②がお得です」と表示される話をしたかと思います。
この結果に応じて、表示メッセージを変える条件分けに苦労しました。
最小値が一つならば
1. 結果をリスト化
2. min()メソッドでリストの中の最小値を取得
3. if文で
と出来るのですが、問題は最小値が複数存在する場合です。
まず初めに考えた方法がこちらです。
ステップ1
リスト1:結果を全て格納したリスト
リスト2:リスト1の最小値を除いたリスト
という2つのリストを作成
ステップ2
1. リスト2の中の最小値を求める
2. リスト1の最小値と比較し、メッセージを表示するか更にリストを作成するかを結果に応じて判断
例
(リスト1の最小値) = (リスト2の最小値) ならばリスト2から最小値を除いたリスト(リスト3とする)を作成し、リスト2の最小値とリスト3の最小値を比較して(リスト2の最小値) < (リスト3の最小値)ならばリスト1とリスト2の最小値である番号がお得と表示する
という具合で最小値を洗い出そうとしました。
しかし、ここで問題発生。
リスト1の最小値って何番の結果?となりました。
思いつくのはif文を使う方法でしたが、細かい条件を持つ何通りものif文は美しいとは思えませんでした。
そこで別の案を練りました。
紐づけと言ったらArrayListだよねと思いながら試したもののうまくいかず
Mapなら使えるかもと試すもやはりうまくいかず…
調べてみても私の理想を叶える方法はわからなかったため、
今回は31通りのif文を駆使して、結果に応じたメッセージ表示を実現させました。
このif文、一例を紹介すると、
(リストの最小値が、①の結果(kg) かつ ②の結果(kg) かつ ③の結果(kg) かつ ④の結果(kg)) または (リストの最小値が ①の結果(g) かつ ②の結果(g) かつ ③の結果(g) かつ ④の結果(g)) ならば 「①,②,③,④がお得です」と表示する
といった具合でメッセージを指定しています。
kgで表示する場合とgで表示する場合とで早い段階で処理を分けたこともあり、非常に複雑な条件式になってしまいました。
これが31通りあるわけです。
大変な思いはしましたが、お世辞にもきれいなコードとは言えませんよね。
一般的にはこれがベストではないでしょう。
しかし限られた時間の中、今ある自身の知識を100%注いだこのコードは、私にとってはベストです。
今後私のベストと世間のベストが近づくよう、言語についての理解を深め、機会があればきれいなコードで書き直したいです。
実現させたいことはこれだけではありません。
次回実装したい機能についてお話します。
<つづく>
この記事へのコメントはありません。