たとえば、 “y = ax^2 + b” のグラフを描画するのであれば、 “x” を適当な範囲で動かせばいい。この場合、 “x” と “y” という要素が存在するのみで、データ構造らしいデータ構造は不要だ。
あるいは、円周上にいくつか場所を取り、その一つにはロボットを、残りにはバッテリーなり宝物なりを置いておき、ロボットに円に沿ってそれらを回収させるような場合、ロボットが進む向き (右に何度曲がるなど)、あるいは原点からの移動角度を持っていればいいだろう。バッテリーかなにかにぶつかったときは、環境がもっている「当たり判定を使う」としてだが。これも、向きあるいは角度だけがあればいいので、データ構造らしいデータ構造は不要だ。
もし二次関数の接線を引くということになれば、 “[[ x0, y0 ], [ x1, y1]]” くらいは必要になるだろう。あるいはロボットの集めるバッテリーや宝物に種類があるとすれば、 “[ 種類, 個数 ]” の並びくらいは必要になるだろう。
だが、よくある、「A君はimをj分で歩きます。B君はkmをl分で歩きます。B君はA君よりm分遅れて出発しました。B君がA君に追い付くのは、B君が出発してから何分後でしょう」というようなものは、プログラミング的思考に基づくなら、A君、B君については “[時刻, 時速, 距離]” くらいのものは作り計算させるのが妥当だろう。プログラムとして書かないとしてもだ。
まだ例を出していないので、わからないという人もいるだろう。適切なデータ構造を使えば、問題を解くのがとても楽になる。たとえば迷路を出してみよう:
これは、「入口」、「分岐点」、「行き止まり」、「出口」に注目すると、次のように書ける。
番号はユーザが勝手につけたものだから、どこが出口なのかはすぐにわかる。この場合、⑩が出口だ。すると、⑩を木に追加した瞬間に⑩から遡っていけば、入口に到達できる。たとえて言うなら、そんな具合だ。迷路を二次元のデータとして描くよりは、問題が解き易くなる。
適切なデータ構造を用いるということは、問題を適切にモデル化することでもある。そこを無視する理由はない。無視するなら、そうとうなあれとも言えるだろう。「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」には、データ構造についての言及はない。つまり、よりにもよって相当なあれが集まったということだ。
保護者や教諭の方々は、面倒と思わずにコンピュータ・サイエンスを勉強して欲しいと思う。kuzu/NULLでは、本企画のリターンとは別に、その要望に応える準備がある。