第4講 メソッド=関数を理解しよう1 

第8話 関数の独立の意味と関数の意義
次のコードをコンパイルして実行したときの実行画面を予想してください。
public class A{
  public static void main(String args[]){
    int a,b,c;
    a=3;
    b=5;
    c=8;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    f();
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void f(){
    a=35;
    b=18;
    c=10;
  }
}

答えは30行下。

























皆さんの予想は、
入門
でしょうか。でも実際には、
java
とエラーです。
えっ、どうして?
だって、
  public static void main(String args[]){
    int a,b,c;
と変数の宣言をしているですって。
前に私が、変数は関数の中でしか通用しないローカル変数だといったのを覚えていますか。
初心者
宣言
    int a,b,c;
された変数a,b,cは赤い囲いの中のみで有効な変数です。
エラーを解消するために
public class A{
  public static void main(String args[]){
    int a,b,c;
    a=3;
    b=5;
    c=8;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    f();
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void f(){
    int a,b,c;
    a=35;
    b=18;
    c=10;
  }
}
これでエラーは解消されますが、
実行画面は
基礎です。
つまり、関数fの操作
    a=35;
    b=18;
    c=10;
はmainの変数a,b,cに対して何の影響も与えないのです。

public class A{
  public static void main(String args[]){
    int a,b,c;
    a=3;
    b=5;
    c=8;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    f();
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void f(){
    int a,b,c;
    a=35;
    b=18;
    c=10;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    g();
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
  }
  public static void g(){
    int a,b,c;
    a=40;
    b=60;
    c=-20;
  }
}
と変更してみましょう。これの実行画面は、
講義
です。
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    g();
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
プログラムは上から順に実行されていきますから、
g();の命令が実行されているにも関わらず、
関数fの変数a,b,cに対しても何の影響も与えないのです。
はじめての
各関数の変数a,b,cは上の枠の中でのみ有効なローカル変数なのです。
ですから、変数名が同じであっても他の関数で変数の値が書き換えられる心配はないのです。
かつてのBASICは、変数名が同じだと他のSubプログラムで変数の値が書きられる可能性がありました。
結局プログラマーはいつでもプログラム全体を見ていないと、
プログラム開発ができなかったのです。
それに対してC言語やJava言語のプログラムの場合、
関数=メソッド=パーツのみの開発に専念すればよいのです。
他のパーツとは完全に独立なので、
何も心配いらないわけです。

この関数の独立、メソッドの独立によってプログラムは著しくわかりやすいものになるのです。
本格的な関数の意義の考察は後の講で行う予定ですが、
パーツを小さくして、組み立てることによって全体が見やすいものになる、
プログラム開発の分業が可能になる、などの利点があることが現時点でもわかります。
この後、if文・for文・while文・関数の再帰的呼び出しなどを学習すると、
関数=メソッドがいかに便利であり、
プログラム全体をわかりやすいものにしているかがより明確にわかるようになります。

プラモデルのように独立パーツの単純な合体によるプログラミング、これが構造化プログラミングです。





第7話へ 第5講第1話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための Java 入門 サイト 基礎から応用まで第1部
初心者のための Java 入門 サイト 基礎から応用まで第2部
初心者のための Java 入門 サイト 基礎から応用まで第3部