2007年05月15日

データ構造とプログラムの構造をあわせることは重要。

  

あるテキストファイルを読み込み、解析するプログラムを作成したのだが、そのときの失敗。

いわゆるインタープリタパターンを利用して、

NodeA -> NodeB -> NodeC -> NodeD -> NodeB

のように、ノードを次々と移動しながら、テキストを解析するコードを書いたわけですが、深く考えずに書いたので、テキストの終わりになるまで新たなNodeをどんどん作りだし、その Nodeにある Execute メソッドを呼ぶような実装になってしまいました。
いちおうこれで目的は達したのですが、巨大なテキストを読み込むと、どんどんメソッドの呼び出しがネストしていき、スタックを大量に使う羽目になってしまいました。

スタックオーバーを起こしているわけではないので、まあいいか、とも思ったのですが、どうも気になるので再度見直すことにしました。

問題は、データの意味的な構造を考えずに、文字列の羅列としてこのテキストファイルを処理しようとしたのが、問題でした。
意味的構造にあわせ、Node の途中で、returnするように変更。

すると、今まで、ちょっと強引に実装していた部分が解消され、そのために用意していたフィールドが不要になったり、最終的に構築する木構造も、より意味を反映できるものになりました。

データ構造にプログラムの構造をあわせることって、当たり前だけどものすごく重要だと思ったしだい。


そういえば、最近、失敗した話ばかりだな。
「窓際プログラマーの失敗だらけ」にブログ名を変えようかな...


 

この記事へのトラックバックURL