プログラミング初心者が知っておくべき考え方の基本

現在ではいろんなプログラミング言語や記述方法が登場しているが、プログラムに共通した考え方を理解しよう

プログラミングするために

プログラミングするためには、その言語の記述方法を理解する必要がありますが、それだけではなくプログラミング全体の構造や処理の流れなども理解する必要があります。そのプログラムはどのように処理が始まってどのように終わるのか、またどのように待機して何かあった時にはどのように処理をするのかなど、詳細な処理は設計によりますが基本的な考え方は共通するところが多くあります。

ただ、数行や数十行書いて実行して完結するようなプログラムは、全体の構造を理解するまでもなくその処理を理解すれば良いので、ここに書かれることは特に必要はないかも知れません。しかし短いプログラムでも、もしライブラリやモジュールを使って処理するようなものであれば、ライブラリやモジュールを事前に読み込むことや定義することを指定されているかと思います。それらはどういうものかを理解するだけで、プログラミング以外の作業がなぜ必要かもわかります。

プログラムは全体を把握することが大事

プログラミング言語を学習して各行の記述方法を理解できたとしても、それだけではそのプログラムの処理を理解することは難しいです。プログラムを書く時にも処理の全体をイメージできないと書けません。プログラムを解析したり書いたりするには全体を把握することが大事です。

プログラムは部品でできている

プログラムは細かな処理が集まって、1つの大きな処理を作ります。そして、目的の機能を実現します。それがアプリやWebサービスなどになって利用されているわけです。大きなプログラムになるほど多くの部品を使って組み立てています。プラモデルに似ているでしょうか。プラモデルは組立図に従ってパーツを繋ぎ合わせて作成します。ほとんどの場合にプラモデルは、組み立てるモノに合わせてパーツは用意されていますが、時にはそのパーツも自ら作成してオリジナルのプラモデルを作ることがあります。プログラムの場合は、組み立てるモノに合わせてパーツが用意されていないことがほとんどです。作りたいモノも自由に発想して組み立てるため、パーツもそれに合わせて作る必要があるのです。全てのパーツを作ることもありますが、中には作りたいモノに使えるパーツがある場合もあります。それが「ライブラリ」や「モジュール」と言われるものです。これらは汎用的に使えるパーツが集まった集合体です。多くの場合、これらを使いつつ作りたいモノにカスタマイズして組み立てていきます。もちろんその「ライブラリ」や「モジュール」も部品が組み合わさってできています。プログラムは部品が集まってできていることを意識して解析したり作ったりすることで、全体を把握する手助けになります。

プログラムの部品はどういうもの?

プログラムの部品とはいったいどういったものでしょうか。「ライブラリ」や「モジュール」も部品です。そして、この「ライブラリ」や「モジュール」も「関数」や「クラス」が集まって作られています。ただ、数行書いて完結するような処理の場合は、処理が少ないので自分自身が関数やクラスを定義してプログラムを書く必要はないですよね。しかし、関数を使って処理を実現しています。例えば、ターミナルの画面に文字を表示したいときはprint(“Hello World”);と書きますが、このprintも関数です。print関数ではターミナルに文字を表示するためにいろいろな処理をしています。プログラムの量が増えてくると、その中で関数やクラスを定義して整理しながら書いていきます。特に違う処理を行う場所でも、他の処理と同じような処理をする場合、共通する部分を関数やクラスにして整理します。print関数のように、関数やクラスもその言語に標準で付いているものは特に定義する必要はないのもあります(標準でも定義が必要な言語もあります)。このような外部の関数やクラスの集まりを「ライブラリ」といいます。使いたい機能を持ったライブラリを定義してその関数やクラスを使います。

一方、モジュールも関数やクラスが集まって作られていますが、モジュールは独立したプログラムなのがライブラリと違うところです。宇宙ステーションを例にすると分かりやすいかもしれません。宇宙ステーションでは接続しているパーツをモジュールといいます。実験モジュールや居住モジュールのように各モジュールは独立して機能しています。プログラムのモジュールもこれと同じです。定義方法や使い方はライブラリと異なりますが、プログラムの足りない機能を補ったり、そのモジュールが持つ独自の機能を使いたい場合などで利用します。

関数やクラスはどういったもの?

プログラムの部品の要素となっている「関数」「クラス」とはいったいどんなものなのでしょう。

関数は、プログラムの処理内容をまとめたもので、呼び出して処理を実行し結果の値を返す一連の手続きを行うものです。以下JavaScriptの書き方例です。

function 関数名(引数) {
  処理内容;
  return 戻り値;
}

同じ処理を何度も実行する処理がある場合は、関数に処理内容をまとめて呼び出せるようにすると、プログラムの構造が整理されて効率よく処理できるようになります。JavaScriptのサンプルや説明でもよく出てくるprint関数やalert関数も、引数に表示したい文字列を渡すとそれを表示してくれます。それぞれの関数の中で文字列を表示するための処理がまとめてあり、実行すると処理を返します。自分自身で文字列を表示する処理を書かずとも、print関数やalert関数を使うことで実行してくれるわけです。

クラスは、少しややこしくなりますが、オブジェクト指向プログラミングの考え方にあるもので、各種データや機能の操作を抽象データ型(オブジェクト)として1つにまとめたものです。一言で説明しても理解するのは難しいと思いますが、ここでは、プログラムのコード量が増えたときにより整理された構造によって効率よく処理する仕組みと理解すればいいでしょう。クラスを説明するときによく使われる「カレー」クラスを例にとってどのようなものか見てみましょう。

カレーにはインドカレーやタイカレーなどもあったり、野菜やビーフなどの具や、辛いものから甘いもの、ライスやナンで食べたり、いろいろな種類のメニューがあります。これを「カレー」クラスとして整理してみると以下の図のようになります。

例えば「ナンで食べる辛いインドビーフカレー」を作りたいときは、「カレー」クラスを実体化し(オブジェクトからインスタンスを生成)、タイプにインド、具にビーフを設定して、スタイルにナン、スパイスを辛くして食べ方や味を操作すれば「ナンで食べる辛いインドビーフカレー」ができます。

オブジェクトとインスタンスは同じ意味で説明されることが多いです。どちらの言葉で説明されていても、「クラスという設計図を具体的に利用できるよう実在させたもの」と理解すればいいでしょう。

以下はクラスについてJavaの書き方例です。

class クラス名 {
  int メンバ変数;
  public void メソッド名 (引数) {
    int ローカル変数;
    処理内容;
  }
}

クラスについて、もう少し踏み込んだ説明は「初心者でもできるJava入門 – はじめての学習まとめ」で掲載します。ここでは考え方について何となく理解できれば、オブジェクト指向プログラミングについての説明がより理解しやすくなるでしょう。

以上がプログラミング考え方の基本についてです。プログラムは部品でできていて、自分で作る部品もあれば、すでにある部品を利用する場合もあることが分かったかと思います。全体を把握して部品を理解すれば、プログラムが何をしているのかが分かります。この基本的な事柄を知っていれば、プログラミングの学習もスムーズにいくでしょう。