プログラムを組む順序の話

お疲れ様です。赤兎です。

今日はリファクタリング沼に悩まされるソロプログラマに向けた話をしようと思います。僕はプログラムを組む順序を間違えて、今現在リファクタリング沼にハマっています。今回は原因が分かりやすかったためnoteとしてまとめようと思います。

プログラムを組む順序は、関係性上位からプログラムを組むと良いというのが結論です。


僕らの世代ならばポケモンはご存知でしょう。ポケモンのプログラムを自分一人で組むならどういった順序で組むでしょうか。

トレーナーがいて、ポケモンがいて、それを捕まえるためのボールがあります。

ここで冷静に見ればボールはトレーナの所有物であるため、トレーナー->ボール→ポケモンの順序で関係性が構築されていることが分かります。これが今回における正解パターンです。

では、僕がどういう失敗をしたかというと、見た目からプログラム順序を決定しました。これらを実装しようとしたときに見た目で分かりやすいのは、トレーナーがマップを移動する姿とポケモンが戦闘をするシーンです。

トレーナーを制作した後にポケモンの戦闘システムを構築しました。さて、ボールを実装します。ここで、頭の中にはポケモンの戦闘シーンが残っています。ここでボールについて考えると、戦闘シーン中にボールを投げてポケモンを捕まえる図が浮かびます。

結果として、ポケモン->ボールの関係性が先に構築されます。するとボールはポケモンをゲットした後にトレーナーの所持リストに追加されることになります。

ポケモン->ボール->トレーナーという図式になります。これは繋がっているものは同じため一見して正解パターンと同じ関係性に見えますが、次にトレーナーがモンスターボールを使う処理を実装するときのことを考えると、ポケモン->ボール<->トレーナーという双方向の関係性が生まれます。

双方向の関係性が生まれるとプログラムは堂々巡りします。

ボールがトレーナの所有物になり、トレーナがボールを使い、トレーナが使ったボールはトレーナの所有物になりトレーナはボールを使う。

冷静に考えれば出てきているボールはそれぞれ別のボールであることは分かりますが、文字として羅列すると非常に困惑することが分かると思います。


今回の話をまとめます。

・見た目が分かりやすい事に流されてプログラムを組んではいけない。

・関係性を考えて上位から順にプログラムを組むこと。

・双方向の関係が出来ないか留意すること。


以上です。実際には会社で組む場合はしっかりと設計を行ったり、柔軟な発想を引き出すためにあえて手あたり次第組むんだなんて人も居るかもしれません。しかし、リファクタリングが多くなる気がするという悩みを抱えている方は、一度思い起こしてもらうと助けになると思います。



この記事が気に入ったらサポートをしてみませんか?