マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第7章 関数の学習

第3話 第1話の最初のコードの説明の続き

コード再掲

#include<iostream>//インクルードファイルiostreamの読み込み

#include<conio.h>//while(!_kbhit());を使うためのお呪い

#include<string> //文字列変数を使えるようにするために組み込む

#include <iomanip> //setprecisionを使えるように組み込む

#include <cmath>//powなどを使うときに必要

#include <ctime>//time()(←現時刻発生する関数)を使うために必要

using namespace std;//coutを使うときに必要なお呪い

int f(int x);//関数です。

int main() {//私は社長だ。

  int y, x;

  x = 5;

  y = f(x);

  cout << "y = f(" << x << ") = " << y << endl;

  while (!_kbhit());//待機させるための命令

  return 0;//int main() を終わるためのお呪い

}

int f(int x) {

  int y=2 * x + 3;

  return(y);

}

このコードについては、まだまだ説明することがあります。

② 部品(関数)同士がプラモデルのように単純な結合である。

の説明が済んでいないからです。

二つの部品(関数)は一か所で繋がっているだけです。

プラモデルも精々数か所と繋がる単純結合です。

人間の脳と臓器の繋がりは、

有機的に繋がりこの上もなく複雑になっています。

NHKは人体というシリーズを10年の間を空けて2回放映しています。

10年の間に医学や測定技術が上がり、

人体に対する認識が大きく変わったからです。

旧シリーズでは、脳によって中央集権方式で一切を管理監督されるという

認識のもとに放映されていましたが、

実は、腸も腎臓も脳のように思考して脳やいろいろな臓器と会話をして、

相互に協力し合っていることがわかってきて

第2の人体を放映する必要があったのです。

脳や内臓のつながりは大変複雑です。

C++の繋がりは常に単純です。

BASICのまずかった点は、Goto文であちらこちらへと繋がっていて、

スパゲティーコードであると悪口を言われていました。

変数はすべてグローバル変数であちらこちらのサブルーチンで値を書き換えられてしまう可能性がありました。

C言語やC++の関数で定義される変数は、

関数内でのみ有効で他の関数で変数の値を書き換えられてしまう心配はありませんでしたが、

BASICでは書き換えられしまう心配がありました。

しかも、Goto文で複雑に繋がっていて単純結合とは言えませんでした。

これは、常にコード全体を見ていなければならない、

分業は難しいということ意味します。

C言語やC++では関数は完全な独立部品ですから、

それぞれの関数を異なる人が作ってもよいことになります。

つまり、分業が可能となるのです。

構造化プログラミングという言葉は、

現在はあまり使われなくなりました。

特に意識する必要がないからです。

現代の言語はすべて構造化プログラミングがされており、

意識する必要はないからです。

ですから言葉自体は覚える必要はありませんが、

背景知識として頭の片隅に入れておく必要はあります。

コードはできるだけ単純に書く、ということを常に心がけなけらばならないからです。

関数同士の繋がりはできるだけ簡単に書くことを意識しなければなりません。

さて、第7話では関数の階層構造に触れ、

それは会社の階層構造と完全に同じである面について見ていきます。

魔方陣の構造=数学の構造=会社組織の構造=世の中の仕組み

という式が成り立つ、ということを見ていきます。

どうして、社長がすべての仕事をやってはいけないのか、

を説明していきます。

会社組織は、社長→部長→課長→係主任→社員というように、

階層構造をしています。

プログラミングも階層構造を持たせると、

全体の繋がりが明瞭になります。

つまり、なぜ関数が必要なのかを明確に知ることになります。

ですが、その前に説明しなければならないことがあります。

正確な説明は次章のポインタを学んでからしかできませんが、

8次魔方陣作成において、使用した2次元配列(本サイトでは鍵のない金庫と比喩します)

実質送ることができます。

実際に送るわけではありませんが、

金庫の場所を教えるとC言語やC++の用意する配列には鍵がかかっていませんので、

金庫の場所(正確には配列の住所であるメモリアドレス)を教えてもらえれば、

社員である関数は自由にその金庫(配列)を使うことができます。

つまり、金庫を物理的に送ってはいませんが、

鍵のないの金庫のあり場所(例えば、地下室倉庫の入口右手など←もちろん比喩です)を教えてもらえば、

社員である関数は誰でも自由に使えるのです。

配列には鍵はかかっていないからです。




第7章第2話へ 第7章第4話へ

本講義トップへ