大切なデータの取り扱い

記事
IT・テクノロジー

大切なデータの取り扱い

プログラミングを学習する場合にはどうしてもプログラミング言語に目が行きがちになります。しかし、プログラミング言語は実は「表現の手段」です。重要なのは、「中身」でデータをどのような形でプログラム中に取り込むかや、データをどう処理するかです。この記事では、プログラミングの中身について考えてみました。


データをプログラムの中でどのように持つか?

以前にも紹介しましたが、殆どのプログラムは二つのタイプに分ける事ができます。 一つは、ユーザーインターフェース(UI)の処理を行うもので、もう一つは、データを処理する物です。

ユーザーインターフェースの処理は、画面上の UI で特定の操作、「クリック」や、「選択」、「入力」などの利用者の操作に応じた処理をする物です。こうした操作をイベントと呼んでいて、イベントが発生した時に、フォームの内容を取り込んだり、画面を切り替えたりなどの処理を行います。このタイプのプログラムは、ある程度書き方のパターンを覚えてしまえば比較的簡単です。

一方で、データの処理を行うタイプは、もう少し複雑になってきます。殆どのプログラムでは、ユーザーインターフェースのイベントの処理で特定のデータ処理のプログラム(関数)を呼び出すという感じの構成になっていますが、その際に、どんなデータを受け取って、どの様な処理結果を返すかという設計になります。データの処理がシンプルな場合には、あまり考える必要はありません。

例えば、二つの数の足し算をして結果を返すという場合には、関数に二つの数を渡して、その計算結果を返すというシンプルな処理になります。しかし、扱うデータが複雑になったり、データの量が増えてくると、このデータの扱い方でプログラムの作り方が変わってきます。また、処理にかかる時間なども変わってきます。

少し複雑な例は、データの並び替え(sort)をするような場合です。並び替えの対象になるデータも単純な数字の場合と、もう少し複雑なデータでは扱い方も変わってきます。例えば、あるクラスのテスト結果のデータを集計する場合を考えてみます。

この場合、クラスの生徒のデータだとすると、「生徒の名前」、「科目」、「点数」などが必要になります。

このデータを利用する場合には、生徒毎、科目毎などのようなグループでの集計が必要になります。

データをどこに保存するか?

クラスのテストデータの集計のアプリを作る場合に考えなければ行けないことは、

* データをどのように入力するか
* データをどのように保存するか
* データをどこに保存するか
* データの再利用は可能か
などを考える必要があります。実はデータの入力は手間がかかる作業の一つです。なので、一度入力したデータは保存しておいて再利用できるようにしておくほうが便利です。したがって、最初の入力は手入力だとしても、一度入力したデータを繰り返し利用することを考えるとデータを何らかの形で保存する必要があります。

保存方法としては、

* データベース
* ファイル
当たりがよく利用される方法です。

この場合に必要な処理は、

* データの入力
* データの保存 になります。
そして、保存したデータを利用する場合には、

* データの読み込み
* データの処理
* 結果の出力(表示)
になります。

プログラムでのデータの扱い

プログラムでやることは色々ありますが、こうしたアプリを作る際に大切なことは、プログラム内でデータをどの様な形で取り込むかになります。例えば入力されたデータをどの様に、プログラム中に取り込むかです。

そして、プログラム中のデータをどの様に保存するか、あるいは保存したデータをどの様に再びプログラム内に取り込むかがポイントになります。そう考えるとプログラムの構成は大きく二つの部分に分ける事ができます。

* 保存場所とのやりとりをする部分
* プログラムの本体(実際のデータ処理を行う部分)
このような構成にしておくと、データの保存場所が、データベースでもファイルでも、その保存場所とのやり取りの部分だけを作ればどちらにも対応可能になります。そして、実際のデータ処理の部分は共通で利用できるように設計します。

そうすると、データは

* 名前
* 科目
* 点数
をひとまとめのグループにして、それを配列(array)などに保存するのが一般的になります。 C 言語などでは、「struct」、オブジェクト指向系の言語では「class」を作って保存するのが一般的です。Javascript 系の言語ではこれらを JSON 形式(連想配列ーデータにラベルをつけてグループ化)などで保存する場合が多くなります。

一般的な配列の場合、データを点数や名前で並べ替える(sort)する場合に不便なので、リスト系のデータにすると、データの場所の入れ替えが簡単にできるようになります。

この記事では実際の処理の詳細には触れませんが、こうした事を考えながらプログラムの中でどの様にデータを「持つ」のかを考えて決める必要があります。

新しいプログラミング言語は楽!

Javascript や Python など最近よく利用されているプログラミング言語には、こうしたデータを保つための仕組みがあらかじめ用意されている場合が殆どです。Javascript や Python の配列(array)はリスト形式のデータの処理もできるような設計になっているので、C 言語の様に、リスト構造を使いたい場合に自分でリストのデータ構造をゼロから作る必要がなくなります。

Javascript の場合には、JSON 形式のデータを簡単に扱えるので、色々なタイプのデータに柔軟に対応できます。

特に、リスト構造のデータを標準ライブラリで扱えるだけではなく、メモリの管理もやってくれます。 リスト構造のデータの場合、新しいデータを追加する場合には、新しい保存場所を確保してリストに追加する必要があります。逆にデータを削除する場合は、リストから削除対象のデータを切り離す必要があります。この時発生した削除したデータをきちんと扱わないと「メモリリーク」の原因になります。メモリリークはアプリがメモリを利用して不要になっても、必要な処理をしてメモリをシステムに返さないと利用できるメモリがアプリを使い続けることで減ってしまうという問題です。 Java などをはじめとする最近のプログラミング言語は、こうした不要になったメモリを OS に返す処理を自動的にやってくれます。(ガーベッジコレクションと呼ばれています。いわゆるゴミ集めという事です)

C 言語が面倒と言われる理由は、カスタムのデータ構造を作るのが面倒なの事に加えて、利用したメモリの処理もプログラムを書いて行う必要があるあたりにあります。一方で、最近人気の新しいプログラミング言語は、ある程度必要なデータ構造は予め用意されていて、面倒なメモリの処理も裏方でやってもらえます。

したがって、大まかなデータの持ち方を考えるだけで、実際のプログラムを簡単に作れます。

まとめ

今回は、データ構造を中心としたデータの扱いについて大まかに書いてみました。 どの様な形でデータをプログラムの中で「持つ」かは、大切なポイントです。

実際には、データをプログラム中に持った上でデータをうまく扱う「定石」があります。これを「アルゴリズム」と呼んでいますが、こちらの方ば別の機会に紹介することにします。プログラム中でのデータの持ち方を決めておけば、あとはデータの保存場所とのやり取りの部分だけを追加すれば、データベースでも、ファイルにデータを保存した場合でも対応が可能になります。

いずれにしても、プログラムをタイプ別に分けて作ると中身もすっきりして読みやすく理解し易いコードになります。

* UI (ユーザーインターフェース)
* データのやり取り(データの入出力ー保存と取り出し)
* データの処理

が大きなタイプです。プログラムを処理のタイプで分けてモジュール化すると再利用もしやすくなって開発効率が上がります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す