プログラミングには、「知識」と「知恵」が必要です。これまで連載でずっとお話してきたプログラミング言語の習得は、「知識」に相当します。プログラミング言語は、コンピューターに命令を伝えるための手段。いわば基礎で、むしろそこからがはじまりとも言えます。自在にプログラミングできるようになるには、命令自体の組み合わせや組み立て方も習得しなければなりません。これが「知恵」です。最終回の今回は、この「知恵」についてお話しします。

基本的な命令の組み合わせでプログラムをつくる

プログラミング言語を実際に習得していくと、実はそこには本当に基本的な命令しかないことが、すぐにわかります。

たとえば、三角形や四角形、五角形などの多角形を画面に描くことを考えてみてください。残念ながらほとんどのプログラミング言語には、こうした図形を描く命令はありません。あるのは「線を描く」という命令だけです。そのためこうした図形を描くには、線を何本か組み合わせるしかありません(ただし四角形に関しては、とてもよく使うので特別に用意されていることが多いです)。

つまり自分がやりたいことを用意されている命令の単位まで細分化して、「用意されている命令を組み合わせてつくる能力」が必要です。これがいわゆる「知恵」に相当する部分です。

画像: 基本的な命令の組み合わせでプログラムをつくる

たくさんある「やり方」。どれを使う?

では具体的にどうすればよいのでしょうか?たとえば正三角形を描くことを実際に、ビジュアルプログラミング言語のスクラッチを使って考えてみましょう。

このように小さな命令を組み合わせで目的を達成するための方法は「アルゴリズム(算法。手段のこと)」とも呼ばれ、その方法は一通りではありません。スクラッチでは「ペン」という機能を使って図形を描けます。「ペンの色を変える」「ペンを下ろす」「ペンを上げる」「ペンを特定の場所に動かす」「ペンの向きを回転する」などの命令が用意されています。ペンを特定の場所に動かすには、座標を使います。次のようなX座標とY座標で座標を指定します。

画像1: たくさんある「やり方」。どれを使う?

線を描くには、「ペンの色を変える」「始点にペンを移動する」「ペンを下げる」「終点にペンを移動する」「ペンを上げる」という組み合わせをします。たとえば、Scratchで次のようなプログラムをつくります。ここでは、(0, 0)から(100, 100)に向けて線を描こうとしています。実行すると、斜めの線が描けます。このプログラムを見るとわかるように、プログラムは、本当に命令をただ並べたものに過ぎません。意外とプログラミングって簡単なことがわかるのではないでしょうか。

画像2: たくさんある「やり方」。どれを使う?

結果

画像3: たくさんある「やり方」。どれを使う?

さて、ここまでがScratchの基本、いわゆる「知識」です。ここから、考え方である「知恵」に話を移します。この仕組みを使って、正三角形を描くには、どうすればよいでしょうか?

その方法は、いくつかあります。代表的な方法を2つ挙げてみます。

(1)座標で指定する方法

ひとつめの方法は、あらかじめ座標を決めておき、その座標を次々と入れていく方法です。たとえば、次のような具合です。ここで「100, 173」の座標の「173」は、正三角形を半分にした辺の長さは、「1:2:√3」であることを利用し、√3×100≒173として計算したものです。プログラムは、ただ座標を拾って線を書いているだけなので、簡単ですね。

画像1: (1)座標で指定する方法
画像2: (1)座標で指定する方法

(2)正三角形の性質を使う方法

もうひとつの方法は、正三角形の性質を使う方法です。正三角形は、すべての辺の長さが等しく、角の角度が60度です。そこで、一定の方向に進んだら、180 - 60 = 120度回転して、同じ長さだけ進むことでも描けます。そのようにしてつくったのが、次のプログラムです。

画像1: (2)正三角形の性質を使う方法
画像2: (2)正三角形の性質を使う方法

結果は、どちらも同じです(厳密には計算の誤差は少し出るので完全に同じにはなりませんが)。このように同じ処理をするのでも、その命令の組み合わせ方は、たくさんあります。つまり別解がたくさんあるということです。

これからプログラミングを学習していく過程では、「教科書に書いているのと自分の考えが違う」「先生に習ったのと違う」ということも出てくると思います。でも、同じように動けば、どれも正解です。必ず、どういう方法でつくらなければいけないというわけではありません。

ただし、つくり方によって、「速度が速い」とか「改良しやすい」など特徴があり、善し悪しが出ます。たとえば方法(1)は、座標を拾うだけなのでプログラムはわかりやすいですが、座標を計算するのに√3を使っているので、1対2対√3であるということを知らないと座標の場所がわかりません。

その点、方法(2)は、√3を知らなくても、正三角形の性質だけでプログラミングできます。しかし回転が絡むので、プログラムの理解は少し難しくなります。そして少し捻った方法でもあるので、こうした思いつきができるかどうかという発想力、いわば「知恵があるかどうか」が求められるというわけです。

命令の流れを構成する4つの要素

さて今回は、プログラムが始めてという人がほとんどだと思うので、方法(1)や方法(2)は、命令を単純に上から下へと並べるだけにしましたが、並べるだけでは「いつも決まった動き」しかできません。この例のように正三角形を描くような場合ならよいのですが、たとえば、「Aというボタンが押されたらネコの鳴き声を鳴らす」「Bというボタンが押されたらイヌの鳴き声を鳴らす」というようなプログラムをつくりたい場合、「Aというボタンが押されたか」や「Bというボタンが押されたか」などの判定が必要です。

こうした判定をするために、プログラミングでは、条件分岐などの処理ができるようになっています。プログラミングにおいて基本となるのは、次の4つの要素です。プログラミング言語によって、その書き方は違いますが、どんなプログラミング言語でも、この4つの要素を記述できます。

(a)値の計算

ひとつは、計算をする機能です。足し算、引き算、割り算、掛け算といった四則演算のほか、数学の指数や対数、sin、cosなどを計算することもできます。もちろん、もっと複雑な計算をして、たとえば、いま流行の人工知能のような処理もさせることができます。

(b)値の保存

もうひとつは、値を一時的に保存する機能です。計算した値が必要なときに、都度、計算し直していると、速度がとても遅くなるので、一時的に保存しておいて、必要になったときは、いつでも取り出せるようにする機能です。

(c)条件分岐

すでに説明しましたが、「どのボタンが押されたかによって処理を変えたい」とか何か判断したいときに使います。たとえば、スクラッチの例だと、何かのキャラクタを画面の左右に往復して動かしたいときなどには、「左端に到達したかどうか」とか「右端に到達したかどうか」を調べて、到達していたら、逆向きに動かすというようなプログラムをつくります。

(d)繰り返し

そして繰り返しも、とても重要です。もし、繰り返しの機能がないと、同じ命令をいくつも連ねなければなりません。

さてここで、先ほどの正三角形をつくるプログラムの方法(2)を見てください。よく見ると、「120度回す」と「100歩回す」の組が、3回ありますね。これは、いま挙げた基本機能の「繰り返し」を使うと、短く書けます。スクラッチの場合は、次のように書けます。

画像1: プログラミング言語を習得したら、次は何?【プログラミング言語の選びかた】
画像2: プログラミング言語を習得したら、次は何?【プログラミング言語の選びかた】
画像1: 命令の流れを構成する4つの要素

このように、基本機能を組み合わせてプログラムを短くする、わかりやすくするのも、プログラミング技術のひとつです。ところで実は、この方法(2)ですが、少し改良すると、正四角形や正五角形、正六角形なども描けます。それぞれ、繰り返し回数が「4回」「5回」「6回」で、角度が「90度」「108度」「120度」という違いでしかないからです。

四角形

画像2: 命令の流れを構成する4つの要素
画像3: 命令の流れを構成する4つの要素

五角形

画像4: 命令の流れを構成する4つの要素
画像5: 命令の流れを構成する4つの要素

六角形

画像6: 命令の流れを構成する4つの要素
画像7: 命令の流れを構成する4つの要素
画像8: 命令の流れを構成する4つの要素
記事全文ページのみ

This article is a sponsored article by
''.