これまでは、ただ単にプログラムの書き方を見てきた。
HTML&CSS講座、JavaScript講座は、それぞれでやりたいことがある前提で、それをプログラムで表現することを解説してきた。今更新中のjQuery講座もそうだ。
で、ここまでやっていると、もう一つ気になることがないだろうか…
…そう、「何を」書くか、という部分だ。書く前の部分、考え方にあたる。
というわけで、この考え方の部分を紹介していこう。俗に言う「アルゴリズムとデータ構造」ってやつだ。
これを知っていると、同じ処理をするものでも、どの組み方がいいのか、というのが考えられるようになる。
発展的な内容にはなるが、基礎ができたら、チャレンジしてみて欲しい。
もうちょっと厳密に説明
プログラミングとは
そもそもの話になってしまうが、プログラミングとはいったいなんだろうか?
恐らく、多くの人は「プログラムを作ることだ」と答えるだろう。それは正しい。
では、以下のどこからどこまでをプログラミングと呼ぶのだろうか?
- どんな問題を解決したいかを考えて、何をするプログラムを書くか決める
- 上で決めた内容を、どうやって実現するかを決める
- 実際にプログラムを書く
これは、意識していないとばらついてしまう。
恐らく、これを見る前はこの全てを合わせて「プログラミング」と認識していたのではないだろうか?広義では、確かにそれがプログラミングと言われている。
だが…狭義のプログラミングは、三つ目「実際にプログラムを書く」という部分だけが該当する。
本講座では、単にプログラミングと言えば、この狭義のプログラミングを指す。
これまでの内容
これまでは、この「実際にプログラムを書く」ときにどう書くかを解説してきた。
つまり、これまでの講座を読んでくださった後は、狭義でのプログラミングができる状態になっている。
しかし、このままではまだ二つの部分が残ってしまっている。
これからの内容
というわけで、これから二つ目にあたる「アルゴリズムとデータ構造」という分野のお話をしていく。
これを身に付けておくことで、問題解決したい内容に出くわしたときに、適切なアルゴリズムと、適切なデータ構造を使用することができる。
この、適切な、というものにもいくつかの意味が含まれている。追々解説していこう。
なお、一つ目の、いわば問題を発見する部分については、特定の方法論のようなものはない。
…と言い切ってしまったが、少なくとも私は聞いたことがない。経験を積むしかないだろう。
で、そのための題材としてJavaScriptを使う。もちろん、他の言語でも同じ考え方が使えるので、参考にしてほしい。
アルゴリズム
アルゴリズムとは
アルゴリズム(Algorithm)は、ある問題を解決するための具体的手順を指す。
これは、プログラミングをする前に考える一通りの処理手順のことだと思ってくれればいい。
で、基本的にはそのための入力と、それによって得られる出力、そしてその間の処理がある。
アルゴリズムの具体例
例えば、非常に単純な例として、ある数を受け取った場合に1からその数までの和を求めるアルゴリズムを考えてみよう。
これには、幾つかの方法がある。共通しているのは、入力が一つの数字、出力が求めた和だ。例では、入力がnum
という変数に入っているとしよう。
まず、こんなアルゴリズムが考えられる。
- 出力用変数
res
を用意し、0を代入しておく。 - 変数
i
を用意して初期値を0にする。
それがnum
以下である間、以下の処理を繰り返す。res
にi
を加算する。i
を1増やす。
res
を出力する。
これをそのままJavaScriptで関数化すると、以下のようになるだろう。
function sumAll(num){
var res = 0;
for(var i = 1; i <= num; i++){
res += i;
}
return res;
}
でも、これだと入力した数字numの大きさが極端に大きければ、それだけ時間がかかってしまう。
そこで、和の公式を使ってみよう。高校数学でやったはずだ。すると、アルゴリズムと関数は以下のようになる。
n * (n + 1) / 2
を出力する
function sumAll(num){
return n * (n + 1) / 2;
}
こうすることで、入力numの大きさに依存することなく、1回の計算で答えが出せる。
一つ目の例に比べて、計算回数を大幅に減らすことができたのだ。
あ、上の例は厳密な動作を確認したわけではないので注意して欲しい。あくまでイメージを掴んでもらいたいのだ。
このように、やりたいことに対して、どうやったら効率的にできるか考え、手順化したものがアルゴリズムだ。
データ構造
データ構造とは
こちらは、処理するときのデータをどうやって扱うかの考え方になる。
どういうこと?と思われるかもしれないが、これまでにも幾つかのデータを保持しておくための方法を扱ってきた。
一つは、変数。一つは、配列。また一つは、オブジェクト。
これ以外にも存在するし、そもそもオブジェクトを使用して別の構造を定義することもできる。
何をしたいのかに合わせて、それらのうち適切なものを、適切な形で使用することが必要なのだ。
おわりに
導入なので、かなりざっくりと書いてきた。
今回は、とりあえずそんなもんなんだな程度に分かってもらえればいい。
で、メリットについても書きたかったのだが、それを書くためにも言葉の定義が必要だ。
なので、これらを考えるとなぜいいのかは、またその時に解説しよう。
次回は、これらを語る上で重要になる「計算量」という概念をご紹介しよう。
更新情報はTwitterでも呟いている。よかったら、ページ下部のTwitterアイコンから覗いていってほしい。
それでは。
コメント