第2講 関数を理解しよう

第1話 関数とは?

関数という言葉を聞いて、固まっている人いませんか。
苦手だなたと。
でも、全然苦手意識を持つ必要はありません。
C言語では部品のことを関数というのです。
部品とは、プラモデルのパーツのことを思い浮かべていただければ結構です。
プラモデルと同じで、C言語もパーツを組み合わせることによって、
プログラムを構築していきます。
前回のプログラムコードを次のように変更しましょう。
入門
プログラムソース
using namespace System;
void f1(){
   Console::WriteLine("C言語の学習");
}
void main(){
   f1();
}
これでCtrl+F5でビルドしてみると、
C言語
何のことはありません。前講第4話の問1で作ったものと同じですね。


void f1(){
   Console::WriteLine("C言語の学習");
}

void main(){
   f1();
}

が関数=部品です。
今回のプログラムは、2つのパーツ=関数から構成されています。
そして、mainが親分でf1()は子分です。
void main(){
   f1();
}

親分がf1();で子分f1()よ、働きなさいと命令しているのです。

親分ですが、mainは最後に登場させなければなりません。真打ち最後の登場です。
using namespace System;
void main(){
   f1();
}

void f1(){
   Console::WriteLine("C言語の学習");
}

とすると、
初心者とエラーします。


でも、指令書なんですから最初に親分を登場させたいですよね。
最初に登場させたい場合は、
基礎
using namespace System;
void f1();
void main(){
   f1();
}
void f1(){
   Console::WriteLine("C言語の学習");
}

つまり、main以外の関数は、冒頭でプログラムを構成する部品であることを宣言しなければならないのです。
では、mainは宣言しなくてよいのでしょうか。
それは、mainは必ず登場することになっているので宣言がいらないのです。
main以外は、プログラマーが作る部品=関数ですから、
部品であることをコンピュータの教えないと、『'f1'識別子が見つかりませんでした』と出てきてしまうわけです。
void f1();
を関数のプロトタイプ宣言といいます。
プロトタイプが気になるでしょうが、今は無視しましょう。

では、何故
using namespace System;
void f1(){
   Console::WriteLine("C言語の学習");
}
void main(){
   f1();
}
のときは、エラーしないのでしょうか。
main以前に出てきたものは、構成部品=構成関数であると、C言語の方で認識する仕様になっているからです。
文法でそうなっているので、ここはそういうものだと受け取るしかありません。
英語を習うときにも、文法は覚えるしかありませんよね。
それと同じです。

何の学習でもそうですが、最初から細かいことにこだわっては学習は進みません。
村始まって以来の数学の天才だったスタンダールが、躓いてしまったのは
(-)×(-)が+になることがどうしても納得できなかったということだということですが、
反対の反対は、元に戻るという程度の理解で妥協しなかったために、
数学の天才が躓いてしまったのです。
(もっともそのお陰で、文系に進み世界を代表する文豪になったのですから、
結果的にはよかったのかもしれまえんが。)

完全に理解しようとする姿勢は、プログラム学習の場合学習を妨げることになります。
自分が意図したとおりにコンピュータが動けばよいのです。
最初から、完全に理解しようとする姿勢はとらないようにしましょう。
というのは、学習が進めば後にわかってくるものであるからです。
習うより慣れろです。

さて、私のお勧めは
using namespace System;void f1(){
   Console::WriteLine("C言語の学習");
}
void main(){
   f1();
}
と書くより

using namespace System;
void f1();
void main(){
   f1();
}
void f1(){
   Console::WriteLine("C言語の学習");
}
とかく方です。
1行余計に書かなければなりませんが、設計図は頭にあった方がよいからです。

では皆さん、子分を2つにして
初歩となるようにしてみましょう。Console::WriteLine()には改行の機能も含まれていることを忘れないでください。
改行しないではじめてのとしたいときは、Console::Write()を使います。
それぞれのプログラムコードを考えてみましょう。

第1講第5話へ 第2話へ


戻る



VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)